• 函数(5)


    第5章  自动义功能单元

    声明函数,使用缩进语句表示语句属于函数体
    def <函数名>(参数列表):
        <函数语句>
        return <返回值>

    return后没有返回值和没有return语句的函数都会返回None值

    例:求一个元组中所有数之和的功能
    def tpl_sum(T):
        result=0
        for i in T
            result+=i
        return result

    定义参数
    1、默认值参数:解决既可以向函数传递参数,又可以不传递参数的问题:使用默认值参数
    形式:
    def <函数名> (参数1,参数2,...,参数3=默认值,参数4=默认值...):
        <语句>
    如果参数列表中既有无默认值参数,又包含有默认值参数,必须先声明无默认值参数,后声明有默认值参数
    2、可变数量参数:放在参数列表中的所有参数之后
    形式1:
    def <函数名>(参数1,参数2,...,*参数3):
        <语句>
    *参数3,使用元组收集参数,调用时,只能收集不定数量的位置参数,不能收集关键字参数
    形式2:
    def <函数名>(参数1,参数2,...,**参数3):
    **参数3,使用字典收集关键字参数
    收集字典的方式为函数中使用大量的默认值提供了方便,不用把大量的默认值全放在函数声明的参数中,而是把它放入程序之中
    例:
    def cube(name,**nature):
        all_nature={'x':1,'y':2,'z':1,'color':'white','weight':1}
        all_nature.update(nature)
        print(name,"立方体的属性:")
        print('体积:',all_nature['x']*all_nature['y']*all_nature['z'])
        print('颜色:',all_nature['color'])
        print('重量:',all_nature['weight')

    cube('first')
    cube('second',y=3,color='red')
    cube('third',z=2,color='green',weight=10)

    参数传递
    (1)、按照声明函数时参数的位置顺序进行传递的,即位置参数,位置参数优先使用
    (2)、按照参数名传递值    hello(name="Jonson"),用于多个参数都具有默认值,仅向一个其中部分参数传值的情况
    调用函数提供参数时,位置参数要位于关键字参数之前,且不能对同一个参数重复传参;
    #调用函数时,无默认值参数使用位置传参,有默认值参数使用关键字传参
    (3)、拆解序列
    拆解元组,符号:*,提供位置参数
    拆解字典,符号:**,提供关键字参数
    例:
    def mysum(a,b):
        return a+b

    print('拆解元组调用:')
    print(mysum(*(3,4)))
    print('拆解字典调用:')
    print(mysum(**{'a':3,'b':4}))
    >>>
    拆解元组调用:
    7
    拆解字典调用:
    7
    (4)、在函数调用时,若提供的是不可变参数,那么在函数内部对其修改时,在函数外部其值是不变的;若提供可变参数,则在函数内部对它修改时,在函数外部其值也会改变
    不可变的元素:整数、浮点数、字符串、元组,改变一个指向整数变量的值,直接在内存中创建一个新的整数值,然后将变量引用与其绑定
    可变的元素:列表、字典
    注:在使用空列表作为默认参数时,正确定义方式
    def myfun(lst=None)
        lst=[] if lst is None else lst
        lst.append('abc')
        print(lst)
    错误定义方式:
    def myfun(lst=[])
        lst.append('abc')
        print(lst)

    变量作用域
    内置作用域:Python预先定义的
    全局作用域:所编写的整个程序
    局部作用域:某个函数内部范围

    每次执行函数,都会创建一个新的命名空间,不在相同作用域内的变量名、参数名可以重复
    局部作用域内可以引用全局作用域内的变量(print(a)是可以的),但不可以修改它
    在函数中引用全局变量并进行操作:
    1、将全局作用域中的变量作为函数的参数引用(传参适合可变元素)
    2、在函数中的变量名前使用global关键字
    例:
    def myfun():
        global a
        a=0
        a+=3
        print('函数内a:',a)

    a='external'
    print('全局作用域a:',a)
    myfun()
    print('全局作用域a:',a)
    >>>
    全局作用域a:external
    函数内a:3
    全局作用域a:3

    匿名函数(lambda)
    使用范围:简单匿名函数;不复用的函数。比如,在某个函数中需要一个重复使用的表达式,就可以使用lambda来定义一个匿名函数多次调用
    形式:
    lambda params:expr
    params:参数,
    expr:返回值的表达式,可以是元组,可以调用其他函数
    例:
    import math
    s=lambda x1,y1,x2,y2:math.sqrt((x1-x2)**2+(y1-y2)**2)
    s(1,1,0,0)
    >>>>
    1.4141....

    Python常用内建函数
    help(abs)  #显示abs函数的帮助信息
    bin(20)   #十进制数20转换为二进制字符串形式
    hex(20)   #十进制数20转换为十六进制字符串形式
    oct(20)  #十进制数20转换为八进制字符串形式
    callable(abs)  #检查abs是否可调用
    chr(97)    #ascii码为97转为字符
    ord('k')   #求字符的ascii码
    alst=[0,1,2,3,4]
    list(filter(lambda x:x%2,alst))  #去除列表alst中的偶数
    list(map(lambda x:2*x,alst))   #将列表中的alst元素都扩大两倍
    isinstance('abc',str)     #检查'abc'是否是字符串类型

  • 相关阅读:
    telegraf、influxDB、Grafana的安装与基本使用
    influxdb简单使用
    keepalived 配置文件参数详解
    haproxy acl访问限制IP
    Linux ------清除内存中的cache
    Linux释放内存空间
    火狐添加消息头 Modify Header Value (HTTP Headers)
    maven 安装jar包
    获取mapper
    root of factory hierarchy
  • 原文地址:https://www.cnblogs.com/MUMO/p/5711305.html
Copyright © 2020-2023  润新知