• python函数


    python函数

    一、函数的初识

    特点:

    • 关键字 def,固定不可变
    • def 关键词开头,空格之后接函数名称和圆括号(),最后还有一个":"。
    • 函数名:函数名只能包含字符串、下划线和数字且不能以数字开头。虽然函数名可以随便起,但我们给函数起名字还是要尽量简短,并且要具有可描述性

    优点:

    • 可读性高
    • 降低代码重复性

    函数的结构:

    #基础
    def 函数名():
        函数体   
    #调用
    函数名()
    ---------------------------------
    
    #有参函数
    def 函数名(参数1,参数2):
        函数体
    #调用
    函数名(传参1,传参2)
    
    ---------------------------------
    #有返回值的函数,return后面的代码不会执行
    def 函数名():
        函数体 
        return
    
    例子:
    def meet():
        print('打开')
        print('爱你')
        print('不爱你')
        print('关闭')
    meet()
    
    #return 也可以输出出来
    def meet():
        print('打开')
        print('爱你')
        print('不爱你')
        print('关闭')
        return 'aaa'
    ret = meet()
    print(ret)
    
    
    

    二、函数参数具体介绍

    2.1、形参、实参

    def sum(a):  #形参:形式上的参数---函数定义时的命名的参数
        print(a)
    sum(1)		 #实参:实际上的参数---函数调用时传入的参数
    

    2.2、实参之位置参数

    • 从左至右一一对应,也就是定义了几个形参就得传递几个实参
    def max(a,b):
        if a > b:
            print(a)
        else:
            print(b)
    max(1,2)
    
    #三元运算符:c 等于a,如果a大于b,c就等于a,否在c等于b
    c = a if a > b else b
    

    2.3、实参之关键字参数

    • 调用的时候,把实参一 一复制给形参(可不对应)
    def max(a,b):
        print(a>b)
    max(b=1,a=2)
    

    2.4、实参之混合参数

    • 调用的时候,把上面2种混合用
    • 注意:位置参数一定得在关键字参数前面!!!
    def max(a,b,c,d):
        print(a>b)
    max(a=1,b=2,4,5)
    


    2.5、形参的传参之普通传参

    def max(a,b,c,d):
        print(a>b)
    max(a=1,b=2,4,5)
    

    2.6、形参的传参之可变长度参数(万能参数)

    • 一个*
    • 以*开头代表着一个任意长度的元组,可将一连串参数都放到一个元组中
    • *有拆开元组、列表的作用
    def self_print(name,*a):
        print(a)
        print(type(a))
    self_print(1,2,3,4,5)
    此时name=1,*a=2,3,4,5
    
    
    #拆开元组、列表
    t=(1,2,3,4,5)
    print(*t)
    def f(*tt):
        print(tt)
    f(*[1,2,3,4,5])
    >>>
    1 2 3 4 5
    (1, 2, 3, 4, 5)
    
    • 二个*
    • 以**开头代表着一个字典,参数的形式是“key=value”,可以接受连续任意多个参数
    • **有拆字典的作用
    def d_self_print(**kwargs):
        print(kwargs)
        print(type(kwargs))
    d_self_print(last_name="dsf",first_name="Af")
    
    {'last_name': 'dsf', 'first_name': 'Af'}
    <class 'dict'>
    
    #补充
    def func(*args,**kwargs):
        print(args)			#打印出来的是元组
        print(kwargs)		#打印出的的是字典
    func()
    
    #拆字典
    def ff(**kwargs):
        print(kwargs)
    ff(**{'name':'zhangsan','age':20})
    >>>
    {'name': 'zhangsan', 'age': 20}
    


    2.7、形参的传参之默认参数

    • 定义函数时为参数提供默认值,调用函数时可传也可不传该默认参数的值
    • 所有必须参数必须出现在默认参数前,包括函数定义和调用
    • 当缺省参数没有传入,默认值会生效

    如果想同时使用:参数的最终位置:(a,b,*args,sex='男',**kwarg

    (* **做为形参的时候是聚合,作为实参是打散)

    def f(name, age, sex = 'male' ):
        print('I am %s , I am %d years old'%(name, age))
        print('Sex : %s'%sex)
    
    #不传参,用默认的
    f(name='李四', age=19) 
    #传参,用传入的
    f('张三', 88, sex='female')
    

    三、命名空间(名称空间)

    3.1、命名空间分类

    1. 全局命名空间--> 我们直接在py文件中, 函数外声明的变量都属于全局命名空间

    2. 局部命名空间--> 在函数中声明的变量会放在局部命名空间

    3. 内置命名空间--> 存放python解释器为我们提供的名字, list, tuple, str, int这些都是内置命名空间

    3.2、执行顺序

    ​ 内置名称空间 ----> 全局名称空间 ----> 局部名称空间

    3.3、取值顺序

    ​ 就近原则:先从局部名称空间---->到全局名称空间---->内置名称空间

    ​ 单向不可逆:外面的取不了函数里面的

    3.4、作用域

    ​ 1、全局作用域:包括内置名称空间、全局名称空间

    ​ 2、局部作用域:局部名称空间(函数里面的呗)

    面试题:问为什么抱错啊?

    count = 1
    def fun():
        count += 1
        print(count)
    fun()
    
    #解决方法
    global  count
    count = 2
    def fun():
        global count
        count += 2
        print(count)
    fun()
    

    答案:1、局部作用域不能改变全局作用域(只能引用不能改变)

    ​ 2、当python解释器读取到局部作用域时,发现你对一个变量进行修改的操作,解释器会认为你 在局部已经定义了这个局部变量,他就会从局部找这个局部变量,找不到报错了!

    四、高阶函数(函数的嵌套

    image-20200902010347695

    image-20200902010607578

    image-20200902010807585

    五、内置函数

    ​ 内置函数介绍:就是python封装好的函数、用的时候直接调用就可以了

    一带而过:all() any() bytes() callable() chr() complex() divmod() eval() exec() format() frozenset() globals() hash() help() id() input() int() iter() locals() next() oct() ord() pow() repr() round()

    重点1:abs() enumerate() filter() map() max() min() open() range() print() len() list() dict() str() float() reversed() set() sorted() sum() tuple() type() zip() dir()

    重点2: classmethod() delattr() getattr() hasattr() issubclass() isinstance() object() property() setattr() staticmethod() super()

    六、关键字:global

    global:
    global第一个功能:在局部作用域中可以更改全局作用域的变量。

    count = 1
    def search():
        global count
        count = 2
    search()
    print(count)
    

    利用global在局部作用域也可以声明一个全局变量。

    def func():
        global a
        a = 3
    func()
    print(a)
    

    所以global关键字有两个作用:

    1,声明一个全局变量。

    2,在局部作用域想要对全局作用域的全局变量进行修改时,需要用到 global(限于字符串,数字)。

    七、关键字nonlocal

    nonlocal是python3x新加的功能,与global用法差不多,就是在局部作用域如果想对父级作用域的变量进行改变时,需要用到nonlocal,当然这个用的不是很多,了解即可。

    def add_b():
        b = 42
        def do_global():
            b = 10
            print(b)
            def dd_nonlocal():
                nonlocal b
                b = b + 20
                print(b)
            dd_nonlocal()
            print(b)
        do_global()
        print(b)
    add_b()
    
    nonlocal关键字举例
    

    nonlocal的总结:

    1,不能更改全局变量。

    2,在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,并且引用的哪层,从那层及以下此变量全部发生改变。

  • 相关阅读:
    httpclient_1
    jmeter java请求
    fiddler监听手机
    lr文件的作用?
    配置源
    数据结构--堆
    A + B Problem II 高精度
    最小生成树(kruskal算法)+prim算法
    P3371 【模板】单源最短路径(弱化版)
    P3368 【模板】树状数组 2(实现区间修改&单点查询)
  • 原文地址:https://www.cnblogs.com/hsyw/p/13605248.html
Copyright © 2020-2023  润新知