牛客网刷题笔记(三)

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:

第四行少一个冒号!

猜你喜欢

转载自blog.csdn.net/qq_41895747/article/details/87907325