函数的基本操作
# 定义一个函数 import time def eat (name): print(name) # return 的数据返回类型 # 1. 不写return,则会自动返回一个none # 2. 如果是一个单独的结果,则会返回结果 # 3. 如果是多个数据,则会以元组的形式返回 # 函数的全部变量与局部变量的作用域 # 如果是单独的变量,局部变量不会影响全局变量的结果。例如 names = 'yeyu' def name1(names): names = 'wen' print(names) # 调用names函数,对比函数内里的names与重新调用的names name1('xinxin') print(names) # 如果函数里的变量是列表,字典,集合这种大数据的变更,局部变量会影响到全局变量 _name2 = ['yeyu','wen'] def name2(): _name2[1] = 'xiaotiao' print(_name2) # 对比执行前与执行后的数据结果 name2() print(_name2) # 结果是局部变量影响了全部变量
# 函数之装饰器详解
# 装饰器的分解 # 1.函数即变量 # 2.高阶函数 # a . 用一个函数的结果作为参数,传入另一个函数中。 # b . return 必须包含函数名 # 3.嵌套函数 # 为test1与test2添加一个装饰器(计算时间的功能 ) import time # 第一步:先把功能写出来 # def user_time(): # 必须还一个参数,因为装饰器功能,必须把装装饰的函数作为一个参数传入进来 # print('我要开始计算被计算被装饰的函数体时间了') # start_time = time.time() # 开始的时间戳 # f() # 把传入进来的参数,实际上是运行传入进来的函数体。这个我们就可以添加功能了,如果你想在函数体前添加功能,则在前面写。如果想在后面则会后面写。 # time.sleep(3) # 为是看出效果添加的功能 # stop_time = time.time() # use_time = '结束时间减去开始时间,等于用了多少时间:%s' %(stop_time-start_time) # print(use_time) # 第二步:把添加的功能写出来后,我们重新赋值给原来的调用的函数 # 如:test1调用,我们则相当于: test1 = user_time(test1) # 用添加功能后的user_time重新覆盖test1.这样新功能就添加好了。 # 这样虽然实现了装饰器的功能,但还算真正的装饰器。我们可以把返回结果作为参数,形成嵌套函数。 # def function(f): # user_time() 调用功能函数。由于功能函数里要调用被装饰的函数体做为传参数。所以两个函数必须写在一起,形成嵌套函数。 # return user_time() # 现在把第一步和第二步整理出来形成装饰器函数 def function(f): # 外部函数作为第二部,f就是被装饰的函数体作为参数传入进来 # # 内部函数作为第一步: def user_time(): # 必须还一个参数,因为装饰器功能,必须把装装饰的函数作为一个参数传入进来(通用参数:*args,**kwargs) print('我要开始计算被计算被装饰的函数体时间了') start_time = time.time() # 开始的时间戳 f() # 把传入进来的参数,实际上是运行传入进来的函数体。这个我们就可以添加功能了,如果你想在函数体前添加功能,则在前面写。如果想在后面则会后面写。 time.sleep(3) # 为是看出效果添加的功能 stop_time = time.time() use_time = '结束时间减去开始时间,等于用了多少时间:%s' %(stop_time-start_time) print(use_time) return user_time ---------------------------------------------------------------------------------- @function def test1(): print('in the test1') test1()
函数之递归
函数之迭代器
函数之生成器
【end】