python第二章

详解python文件操作&函数用法

Posted by QQL on October 1, 2018

三元运算

 三元运算又称三目运算,是对简单的条件语句的简写
 优点
  它在一行中书写,代码非常精练、执行效率更高
 缺点
  嵌套使用的三元运算符可读性不太好,日后对代码的维护极可能存在问题

python最大递归层数:998

 更改最大递归层数:import sys sys.setrecursionlimit(100000)

python2与python3区别

 1.print
  在 Python 2 中, print 被视为一个语句而不是一个函数
 2.整数的除法
  Python 2进行底除法,使得对于商x,返回的数字是小于或等于x的最大整数,例如
   a = 5/2 print a »a = 2
   如果要解决这个问题 运算则需要写成:5.0/2.0 = 2.5
  在 Python 3 中,整数除法变得更直观,例如
   a = 5 / 2 print(a) » a=2.5
 3.支持 Unicode
  Python 2 默认使用 ASCII 字母表
   要使用Unicode编码需要 u”hello,qql”(前缀u代表unicode)
  Python 3 默认使用 utf-8
 4.后续发展
  Python 3 和 Python 2 之间的最大区别不是语法上的,而是事实上 Python 2.7 将在 2020 年失去后续的支持,Python 3 将继续开发更多的功能和修复更多的错误。

用一行代码实现数值交换

 a,b=b,a print(a,b) » a=2,b=1

Python3和Python2中 int 和 long的区别?

 long整数类型被Python3废弃,统一使用int

xrange和range的区别?

 1.range和xrange都是在循环中使用,输出结果一样。
 2.range返回的是一个list对象(可迭代对象),而xrange返回的是一个生成器对象(xrange object)。
 3.xrange则不会直接生成一个list,而是每次调用返回其中的一个值,内存空间使用极少,因而性能非常好。
注意:Python 3.x已经去掉xrange,全部用range代替。

文件操作时:xreadlines和readlines的区别?

 二者使用时相同,但返回类型不同,xreadlines返回的是一个生成器,readlines返回的是list

python 函数的参数传递:

 不可变类型:
  类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。
 可变类型:
  类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响

函数参数中*args,**kwargs

 传入的参数转换成元组–函数内args为元组,参数必须为a=1,b=2转换为字典–函数内kwargs为字典
 如果单独出现星号 * 后的参数必须用关键字传入:»> def f(a,b,*,c): … return a+b+c
  »> f(1,2,3) # 报错
  »> f(1,2,c=3) # 正常

变量作用域

 变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python的作用域一共有4种,分别是:
  L (Local) 局部作用域
  E (Enclosing) 闭包函数外的函数中
  G (Global) 全局作用域
  B (Built-in) 内建作用域
  以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。
  Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的
  global:修改全局作用域
  nonlocal:修改嵌套作用域(Enclosing闭包函数)

python内置函数:


 abs() 函数返回数字的绝对值
 map(func_name,iterable) 用于把可迭代对象每个元素放入函数中执行,返回一个迭代器对象,可通过list()进行转换
  function – 函数、iterable – 一个或多个序列。多用于和匿名函数lambda进行组合使用
  python2中返回一个列表,python3进行了内存优化
 filter(function, iterable)用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。
  该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
  python2中返回一个列表,python3进行了内存优化
 sorted(iterable, key=None, reverse=False)函数对所有可迭代的对象进行排序操作。
  sort 与 sorted 区别:
   sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
   list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
  iterable – 可迭代对象。
  key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
  reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
 eval() 函数用来执行一个字符串表达式,并返回表达式的值。
  例如:»> eval(‘pow(2,2)’) 4
 zip([iterable, …])将可迭代对象(list/dict/set/tuple/str/generator生成器)对应的元素打包成一个个元组,进行一对一拼接
  使用案例:zip案例.jpg

闭包

 关于闭包:即函数定义和函数表达式位于另一个函数的函数体内(嵌套函数)。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数。内部函数会在外部函数返回后被执行
 意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域

生成器/可迭代对象/迭代器

 凡是可作用于for循环的对象都是Iterable类型;
 凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;
 集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。
 Python3的for循环本质上就是通过不断调用next()函数实现的

文件处理

文件处理.jpg

生成器详解:

生成器.jpg

装饰器详解:

 无参装饰器
  普通装饰器
 有参装饰器
  在普通装饰器上多套了一层函数,进行传参,用于给内部函数需要的变量
  示例:
  有参装饰器.jpg
 多层装饰器
  示例:
  多层装饰器.jpg