zoukankan      html  css  js  c++  java
  • 函数

    函数

    列表推导式(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))

  • 相关阅读:
    DVWA 黑客攻防演练(十)反射型 XSS 攻击 Reflected Cross Site Scripting
    DVWA 黑客攻防演练(九) SQL 盲注 SQL Injection (Blind)
    DVWA 黑客攻防演练(八)SQL 注入 SQL Injection
    DVWA 黑客攻防演练(七)Weak Session IDs
    DVWA 黑客攻防演练(六)不安全的验证码 Insecure CAPTCHA
    DVWA 黑客攻防演练(五)文件上传漏洞 File Upload
    工作流表结构设计
    Visual Studio 2019尝鲜----新建空项目体验
    《使用CSLA 2019:CSLA .NET概述》原版和机译文档下载
    .NET快速开发平台的在线预览
  • 原文地址:https://www.cnblogs.com/yanruizhe/p/11218357.html
Copyright © 2011-2022 走看看