python课堂6:函数和匿名函数

函数和内置函数

函数:
减少重复代码,一处定义多处调用,一处修改,多处改变。

def func_name(args):
    print('运行逻辑',args)
    return '返回值'
func_name('形参') #函数名指向函数的内存,后面加括号,运行该函数。

参数:形参 实参 位置参数 默认参数 关键字参数 非固定参数
形参函数定义时等待传递的参数,实参是调用函数时传递的参数。
形参中有多个参数时,传递实参时一般按照顺序传入实参,这种参数叫位置参数。
传递实参时使用 形参名=实参 的方法叫做关键字参数。
定义形参时还可以直接给形参赋值,如果不传入实参则默认传入该值。叫做默认参数。默认参数定义时必须在位置参数的后面。
非固定参数:
args : 可以传入任意多个值,传入时会被打包为元组。
当需要传入值是列表元组等值时,会整体的看做元组的一个值传入进去,想要解开列表将其中的元素直接传入需要在前面加

args:可以传入任意个关键字参数,打包成一个字典传入。
当需要直接传入字典时,会被当做一个参数传入到其他参数中去,需要解开字典,将键值对传入再打包成字典,需要在字典前加
号。

传入的多个元素和未定义的关键字参数会分别被 *args **kwargs 接收

def foo(a,*args,**kwargs):
    print(a)
    print(args)
    print(kwargs)
foo('a','args','args1','args2',kwargs='k',kwargs1=123)

传入没有定义的关键字参数,这样就会被传入**kwargs
传入列表,元组,字典,想要被*args kwargs接收,需要在前面加上* 或

def bar(a,*args,**kwargs):
    print(a)
    print(args)
    print(kwargs)
bar('a',*[1,2,3,4],**{'k':'v','k1':12})

返回值:
函数运行结束后 可以使用return 语句返回一个任意值。

def foo():
        print('this is foo')
        return 'this','is','return' # 返回多个值,会组合为元组。
        print('return 后的语句不会运行,函数return 就结束了')
    print(foo())

局部变量,作用域:
函数中调用变量时优先调用本地的局部变量,没有才去找全局变量。函数外,无法调用函数内的局部变量。
函数内声明的和全局变量相同的变量,并不是覆盖全局变量,而是声明了和全局变量无关的局部变量。
如果想要在函数内,改变全局变量的值,需要使用global val 明确定义下面使用的是全局变量

name = 'qianlei'
            age = 20
            def a():
                global name
                name = 'alex'
                age = 30
                print('a name :',name,id(name))
                print('a age :',age,id(age))
                def b():
                    global age
                    age = 40
                    print('b name: ',name,id(name))
                    print('b age :',age,id(age))
                b()
            a()
            print('全局 name:',name,id(name))
            print('全局 age :',age,id(age))
        #运行结果:
            a name : alex 31350600
            a age : 30 8791270283200
            b name:  alex 31350600
            b age : 40 8791270283520
            全局 name: alex 31350600
            全局 age : 40 8791270283520

匿名函数:
#匿名函数,lambda 参数 :逻辑
res = lambda x,y :x+ y
print(res(3,4))

猜你喜欢

转载自www.cnblogs.com/qianduoduo123/p/9261596.html
今日推荐