Python学习Day3&Day4 ----函数

好像第三天的学习笔记忘写了,直接合并到一起来,学的貌似都是函数的相关知识

1.变长参数

  • ‘ * ’ 将参数都放到一个元组中
def sef_print(name, *a):
    print(name, a)
    print(type(a))
sef_print(1, 2, 3, 4, 5, 6)
>>>  1 (2, 3, 4, 5, 6)
>>>  
  • ‘**’传入字典
def self_print1(**kwargs):
    print(kwargs)
self_print1(first_name = 'j', last_name = 'sl')
def self_print2(d={}):
    print(d)
self_print2({'name':'jsl'})
>>>  {'first_name': 'j', 'last_name': 'sl'}
>>>  {'name': 'jsl'}
  • ‘ * ’ 和 ‘ * * ’ 混合传入,传入顺序:位置参数-->元组-->字典,不是这个顺序会报错
def mix(name, *t, **kw):
    print(name)
    print(t)
    print(kw)
mix('jsl', 0, 'nan', born=1997)
>>>  jsl
>>>  (0, 'nan')
>>>  {'born': 1997}
  • ‘ * ’ 和 ‘ * * ’ 本身有拆解元组、字典的作用
t = (1,2,3,4,5)
print(*t)
def f(*tt):
    print(tt)
f(*(1,2,3,4,5))
def ff(**kwargs):
    print(kwargs)
ff(**{'name':'jsl', 'sex':'nan'})
ff(name='jsl', sex='nan')
>>>  1 2 3 4 5
>>>  (1, 2, 3, 4, 5)
>>>  {'name': 'jsl', 'sex': 'nan'}
>>>  {'name': 'jsl', 'sex': 'nan'}

2.函数的引用

  • 数据分为引用类型,普通类型;
  • python中的基本数据类型都是普通类型。数,布尔,字符串;
  • 除此之外都是引用;
  • 赋值的时候传的是值本身;
  • 引用类型传的是地址;
  • 传参本质是赋值操作,如果传入引用类型,则需要注意在函数中是否对其做出了修改
  • 函数名的本质是函数的地址,函数的嵌套,也就是闭包
  • 内层函数可以访问外层函数的变量,但是不能修改
  • 内层函数访问变量时,会先从自己的内部查找,如果找不到,就会层层向上查找
  • Python中变量的作用域以函数为单位
  • global定义全局变量
a = 10
def outer():
    def inner():
        #global定义全局变量,最外层
        global a
        a += 1
        print(a)
    return inner()
f = outer
f()
f()
f()
>>>  11
>>>  12
>>>  13
  • nonlocal定义局部变量
def outer():
    a = 10
    def inner():
        #nonlocal定义嵌套层的函数变量
        nonlocal a
        a -= 1
        print(a)
    return inner
f = outer()
f()
f()
f()

上面两个例子调用格式不一样,outer函数或inner函数有无括号,区别在于函数名本质是函数地址,以及全局变量和局部变量的作用域不同

3.递归

递归的定义:递归
上面就是递归的含义了,递归就是递归,啥玩意儿呀,说了跟没说一样,一直以来我都搞不清楚递归到底是什么意思,直到有一天我去食堂吃饭的时候,机缘巧合之下我终于搞清楚了递归的含义。
话说当时我到食堂打饭,阿姨忽然问我:
“小伙砸你用什么吃饭?”
“用嘴巴吃呀,咋了阿姨?”我不假思索的答道,当我看到阿姨扬了扬手中的匙子和筷子的时候,我不禁老脸一红......与此同时我瞬间就明白了,我之前思考“递归”太入神了,以至于我不自觉的将递归的思想代入这个情境。“我的嘴巴”的“我”的一部分,我用我的嘴吃饭,就是我调用了我,原来这就是递归,生活中真是处处有学问......(摘自《小学生满分作文精选100篇》)

4.某内置高阶函数

  • map(function, inteable)
    该函数会把inteable中的数据依次传递给function函数处理,最后把处理的结果返回
def power(x):
    return x * x
res = map(power, [1,2,3,4,5])
print(list(res))
>>>  [1, 4, 9, 16, 25]
  • reduce
    reduce(func, inteable)函数,累计操作,func函数必须接收两个参数
    reduce会把func的运行结果作为一个参数,然后从inteable中取另一个参数
from functools import reduce
li = [1, 2, 3]
res = reduce(lambda x, y: x * y, li)
#第一次直接从列表中取数据
print(res)

5.后记

这周考试太多,先随便写写吧,有空再更新......

你可能感兴趣的:(Python学习Day3&Day4 ----函数)