• 函数


    函数

    列表推导式(List Comprehension)

    可以更优雅地创建一个列表,通常是通过一个序列(Sequence)进行构建一个列表

    函数(Function)

    实现某个功能的代码块,即将若干行代码封装在一起成为一个独立的整体,便于代码复用,体现模块化编程的思想

    分为两种:

    • 内置函数(Built-in Function):Python解释器提供的,直接可以使用,例如print,input,type等

    • 自定义函数(Self Defined Function):自己定义的函数,使用def关键字定义一个函数

    函数名命名规则和变量名一样

    调用函数时程序执行流程会发生跳转,即进入到函数内部执行里面的语句,当函数内部的所有语句执行完了,或者执行了return语句,函数就执行结束返回了,继续往下执行调用处之后的语句

    在一个函数中,如果没有return语句或者return关键字后面没有除了None之外的值,那么函数的返回值都是None

    函数可以return多个值,本质其实是返回一个tuple

    函数参数(Function Argument)的不同情况:

    • 未知参数(Positional Argument),按照参数定义的位置传递,并且是必须的

    • 默认参数(Default Argument),参数带有默认值,如果调用时没有传参,则参数使用默认值,默认参数必须写在所有非默认参数的右边,为了让函数调用起来更轻松简单,建议将变化大的默认参数写在变化小的左边,默认参数方便以后调用,减少代码的重复量

    • 可变参数(Variable Argument):参数个数不固定,其实可变参数就是一个tuple

      • 关键字参数(Keyword Argument),就是一个dict类型的参数

      • 命名关键字参数(Named Keyword Argument),和关键字参数一样,只是限定了函数能接受的关键字参数中的key的名字

      虽然函数的参数有多种形式,但我们在实际应用中不要在一个函数中同时使用多种形式,建议不要超过两种,否则会让代码可读性大大降低,函数也很难调用

       

    扩展

    1.默认参数要靠右写,不要和非默认参数混合写,默认参数变化小的写在最右边

    2.代码风骚后学习软件工程

    map(func, seq1[, seq2,…]) 第一个参数接受一个函数名,后面的参数接受一个或多个可迭代的序列,返回的是一个集合。

    Python函数编程中的map()函数是将func作用于seq中的每一个元素,并将所有的调用的结果作为一个list返回。如果func为None,作用同zip()

    filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

    该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

     

     函数详解

    '''
    认识函数:在一个完整的项目中,某些功能会反复的使用。
    那么会将功能封装成函数,当我们要使用功能的时候直接调用函数即可

    本质:函数就是对功能的封装

    优点:
    1.简化代码结构,增加了代码的复用度(重复使用的程度)
    2.如果想修改某些功能或者调试某个BUG,只需要修改对应的函数即可

    定义函数:
    格式:
    def 函数名(参数列表):
    语句
    return 表达式


    def: 函数代码块以def关键字开始

    函数名:遵循标识符规则

    参数列表:(参数1,参数2,参数3,....)任何传入函数的参数
    和变量必须放在园括号之间,用逗号分隔。函数从函数的调用者
    那里获取的信息

    ():是参数列表的开始和结束

    冒号:函数的内容(封装的功能)以冒号开始,并且缩进

    语句:函数封装的功能

    return:一般用于结束函数,并返回信息给函数的调用者

    表达式:即为要返回给函数的调用者的信息

    注意:最后的return表达式可以不写,相当于return None

    #######
    函数的调用
    格式:函数名(参数列表)

    函数名:是要使用的功能的函数名字
    参数列表:函数的调用者给函数传递的信息,如果没有参数,小括号
    也不能省略

    本质:实参给形参赋值的过程
    '''


    #定义了一个无参无返回值的函数
    def myPrint():
    print("sunck is a very good man!")
    print("sunck is a nice man!")
    print("sunck is a handsome man!")

    myPrint()
    myPrint()

    ######函数的参数####
    #需求 :编写一个函数,给函数一个字符串和一个年龄,在函数
    #内部打印出来

    #形参(形式参数):定义函数时小括号中的变量,本质是变量
    #参数必须按顺序传递,个数目前要对应
    #def myPrint(str,age,hoby):
    # print(str,age)
    def myPrint(str,age,):
    print(str,age)

    #实参(实际参数):调用函数时给函数传递的数据,本质是值
    myPrint("sunck is a good man",18)


    ####函数的返回值####
    #编写函数,实现功能,给函数两个数,返回这两个数的和
    def mySum(num1,num2):
    #将结果返回给函数的调用者
    return num1+num2
    #执行完return语句,改函数就结束了,return后面的代码不执行
    print("*****8")

    res = mySum(1,2)
    print(res)


    #####传递参数####
    #值传递:传递的不可变类型
    #string、tuple、number是不可变的
    def func1(num):
    num=10

    temp=20
    func1(temp)
    print(temp)

    #引用传递:传递的可变类型
    #list、dict、set是可变的
    def func2(lis):
    lis[0]=100

    li=[1,2,3,4,5]
    func2(li)
    print(li)

    ###关键字参数####
    '''
    概念:允许函数调用时参数的顺序与定义时不一致

    '''
    def myPrint(str,age,):
    print(str,age)

    #使用关键字参数
    myPrint(age=18,str="sunck is a good man")


    ####默认参数###
    '''
    概念:调用函数时,如果没有传递参数,则使用默认参数

    要用默认参数,最好将默认参数放到最后
    def myPrint(str,age=18,):
    print(str,age)

    myPrint("sunck is a good man")
    '''
    def myPrint(str="sunck is a good man",age=18,):
    print(str,age)

    myPrint(age=17,str="sunck is a good man")


    ####不定长参数###
    '''
    概念:能处理比定义时更多的参数


    '''
    #加了星号(*)的变量存放所有未命名的变量参数,如果
    #在函数调用时没有指定参数,它就是一个空元祖
    def func(name,*arr):
    print(name)
    for x in arr:
    print(x)

    func("sunck","good","nice")

    #**代表键值对的参数字典,和*所代表的意义类似
    def func2(**kwargs):
    print(kwargs)

    func2(x=1,y=2,z=3)

    #利用函数求多个数的和
    def mySum(*l):
    sum=0
    for i in l:
    sum+=i
    return sum
    print(mySum(1,2,3,4,5))

    #可传递任意参数
    def func3(*args,**kwargs):
    pass


    #########匿名函数######
    '''
    概念:不使用def这样的语句定义函数,使用lambda来创建
    匿名函数

    特点:
    1.lambda只是一个表达式,函数体比def简单
    2.lambda的主体是一个表达式,而不是代码块,仅仅只能在lambda
    表达式中封装简单的逻辑
    3.lambda函数函数有自己的命名空间,且不能访问自由参数列表之外的
    或全局命名空间里的参数
    4.虽然lambda是一个表达式且看起来只能写一行,与c与c++内联函数
    不同


    格式:lambda 参数1,参数2,......参数n:expression

    '''
    sum =lambda num1,num2:num1+num2
    print(sum(1,2))

  • 相关阅读:
    符号解析
    编译器与链接器的功能
    hook的本质就是在本原可执行文件中加东西
    Mac-O文件加载的全过程(一)
    系统在执行可执行文件几个过程
    动态库连接器–动态库链接信息(Mach-O文件格式和程序从加载到执行过程)
    load 调用的顺序
    iPhone Mach-O文件格式与代码签名
    Redis正确使用的十个技巧
    redis slowlog
  • 原文地址:https://www.cnblogs.com/yanruizhe/p/11218357.html
Copyright © 2020-2023  润新知