1. 装饰器应用
def dec(f):
n = 3
def wrapper(*args,**kw):
return f(*args,**kw) * n
return wrapper
@dec
def foo(n):
return n * 2
print(foo(3))
等价于:
def dec(f):
n = 3
def wrapper(*args,**kw):
return f(*args,**kw) * n
return wrapper
foo=dec(foo)
def foo(n):
return n * 2
print(foo(3))
结果为18
装饰器的作用是将待装饰的函数值赋给装饰器,再将返回值重新赋给函数
参考:https://www.zhihu.com/question/26930016/answer/99243411
2.浅拷贝和深拷贝
import copy
a = [1, 2, 3, 4, ['a', 'b']]
b = a # 引用,除非直接给a重新赋值,否则a变则b变,b变则a变
c = copy.copy(a) # 浅复制,只会拷贝父对象, 不会拷贝父对象中的子对象,所以若a的子对象变则c 变,但是父对象变c不会变
d = copy.deepcopy(a) #深拷贝,完全拷贝,完全独立于原对象,a变也不变
a.append(5) # 改变父对象
a[4].append('c') #改变父对象中的 ['a', 'b']子对象
# a=[1, 2, 3, 4, ['a', 'b','c'],5]
b=[1, 2, 3, 4, ['a', 'b','c'],5]
c=[1, 2, 3, 4, ['a', 'b','c']]
d=[1, 2, 3, 4, ['a', 'b']]
3.浮点数
import math
math.floor(5.5)
结果是5
官网描述如下:
4.
__name__这个系统变量显示了当前模块执行过程中的名称,如果当前程序运行在这个模块中,__name__ 的名称就是__main__如果不是,则为这个模块的名称。
__main__一般作为函数的入口,类似于C语言,尤其在大型工程中,常常有if __name__ == "__main__":来表明整个工程开始运行的入口。
参考:https://blog.csdn.net/iamoldpan/article/details/78077983
5.tuple元组值不可以被改变
6.找错误:
1.bit = input("Enter a binary digit:")
2.if bit = 0 or 1:
3. print "your input is" ,bit
4.else
5. print "your input is invalid"
第二行相当于:
if bit == 0 or 1: #相当于 if (bit == 0) or 1:
第四行少一个冒号!