coding:utf8
python中的一些特性
def fun1(x, y):
print(x, y)
def fun2(x=[]):
x.append(1)
print(x)
def fun3(x=None):
if x is None:
x = []
x.append(1)
print(x)
# 一.函数
## 1.函数参数解包
if __name__ == '__main__':
lis = [1, 2]
fun1(*lis)
dic = {"x": 1, "y": 2}
fun1(**dic)
2.函数默认参数陷阱
如果参数默认值是在函数编译compile阶段就已经被确定。之后所有的函数调用时,如果参数不显示的给予赋值,
那么所谓的参数默认值不过是一个指向那个在compile阶段就已经存在的对象的指针。如果调用函数时,没有显示指定传入参数值得话。
那么所有这种情况下的该参数都会作为编译时创建的那个对象的一种别名存在。如果参数的默认值是一个不可变(Imuttable)数值,
那么在函数体内如果修改了该参数,那么参数就会重新指向另一个新的不可变值。而如果参数默认值是和本文最开始的举例一样,是一个可变对象(Muttable),那么情况就比较糟糕了。
所有函数体内对于该参数的修改,实际上都是对compile阶段就已经确定的那个对象的修改。
fun2() # [1]
fun2() # [1, 1]
fun2() # [1, 1, 1]
fun3()
fun3()
# 二.运算
## 1.强制浮点
# from __future__ import division #只能在文件头部引入
result = 1 / 2
# print(result)
# 0.5
三.运算符
1.python中的== 和 is
python中的对象包含三要素: id, type, value id 用来标识唯一一个对象,type标识对象的类型,value用来设置对象的值。 is 判断是否是一个对象,使用id来判断的。 == 是判断a对象的值是否是b对象的值,默认调用它的__eq__方法。
2.链式比较 x = 3
print(1 < x < 5)
## 3.三元运算符
y = 5
small = x if x < y else y
print(small)
4.单下划线_
命令行模式中表示上一条语句的返回值
果你写了代码 : from import * ,那么以 _ 开头的名称都不会被导入,除非模块或包中的 __all__ 列表显式地包含了它们
print("=========================单下划线_=============================")
## 如果不需要执行次数变量,可以这样玩,更高校
n = 2
for _ in ran