三元运算
三元运算又称三目运算,是对简单的条件语句的简写
优点
它在一行中书写,代码非常精练、执行效率更高
缺点
嵌套使用的三元运算符可读性不太好,日后对代码的维护极可能存在问题
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生成器)对应的元素打包成一个个元组,进行一对一拼接
使用案例:
闭包
关于闭包:即函数定义和函数表达式位于另一个函数的函数体内(嵌套函数)。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数。内部函数会在外部函数返回后被执行
意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域
生成器/可迭代对象/迭代器
凡是可作用于for循环的对象都是Iterable类型;
凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;
集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。
Python3的for循环本质上就是通过不断调用next()函数实现的
文件处理
生成器详解:
装饰器详解:
无参装饰器
普通装饰器
有参装饰器
在普通装饰器上多套了一层函数,进行传参,用于给内部函数需要的变量
示例:
多层装饰器
示例: