码迷,mamicode.com
首页 > 编程语言 > 详细

python基础(十)--函数进阶

时间:2019-08-21 17:37:53      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:inner   匿名   生成器   匿名函数   obj   依次   pre   print   自己   

嵌套函数

>>> graphic = 三角形
>>> def chang():
    graphic = 正方形
    def chang1():                            #内部嵌套的函数命名可相同
        graphic = 圆形
        print(第三层打印,graphic)
    chang1()                                 
    print(第二层打印,graphic)
>>> chang()
第三层打印 圆形
第二层打印 正方形
>>> print(第一层打印,graphic)
第一层打印 三角形
#在各自的命名空间中同名变量不受影响

匿名函数

lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数

语法为 lambda [arg1 [,arg2,.....argn]]:expression ,以变量的方式调用 sum = lambda arg1, arg2: arg1 + arg2 

装饰器

装饰器的作用:在原先代码不改变的情况扩展功能

 def test(f):
    def inner():
    print(hello)
    f()
    return inner        # 返回内部函数对象,内部不调用,这种现象称为‘‘闭包’’
            
@test
def log():
    print(world)    

# @test 相当于执行 log= test(log) 

log()                # 现在的log()相当于inner()
--------------------
hello
world

 装饰器的参数传递

def test(f):
    def inner(*arg):
    print(hello)
    f(*arg)             #此处f(*arg)是原先login函数的调用
    return inner

@test
def login(x=None):
    if x == xing:
    print(world)

login()           #不传参数,因为inner函数是可选参数,f(*arg)则中则为默认参数x = None
---------------
# hello
--------------
login(xing)
---------------
# hello
# world

递归函数

递归函数需设停止递归的条件

递归代码还有代码的话,递归结束后还会依次执行

def calc(n):
    print(n )
    n = int(n /2) # 50
    if n > 0:
        calc(n) # 50
    print(n)

生成器

a = [x for x in range(10)]
b = (x for x in range(10))
print(a)
print(b)
-------------------
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# <generator object <genexpr> at 0x00505070>

 

python基础(十)--函数进阶

标签:inner   匿名   生成器   匿名函数   obj   依次   pre   print   自己   

原文地址:https://www.cnblogs.com/lalaxing/p/11322535.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!