zoukankan      html  css  js  c++  java
  • Day3-Python3基础-函数

    本节内容

    1. 函数基本语法及特性

    2. 参数与局部变量

    3. 返回值

    嵌套函数

    4.递归

    5.匿名函数

    6.函数式编程介绍

    7.高阶函数

    8.内置函数

    1.函数的定义  

    定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可

    特性:

    1. 减少重复代码
    2. 使程序变的可扩展
    3. 使程序变得易维护
    '''
    定义函数
    def 函数名称(参数1,参数2,...):
        "文件字符串"
        <语句>
        
    文件字符串可以省略,用来作为此函数的字符串。
    如果文件字符串存在,必须是函数的第一个语句。
    '''
    def getmyname():
        "my name is yun"
        return "yun"
    myname = getmyname()
    print(myname)
    View Code

    2. 参数与局部变量

    形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量

    实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值

    关键参数

    正常情况下,给函数传参数要按顺序,不想按顺序就可以用关键参数,只需指定参数名即可,但记住一个要求就是,关键参数必须放在位置参数之后。

    def test(x,y):#形参
        print(x)
        print(y)
        return 0
    
    test(1,2)#位置参数调用与形参一一对应
    
    test(y=3,x=4)#关键字调用
    
    test(2,y=2)#混合,位置参数必须在关键参数的前面
    View Code

    非固定参数

    *args 会把多传入的参数变成一个元组形式

    def test1(*args):
        print(args)
    
        return 0
    
    def test2(x,*args):
        print(x)
        print(args)
        return 0
    
    test1(1,2,3,4,5)
    test2(1,23,4,5,6,6)
    View Code

    *kwargs 会把多传入的参数变成一个dict形式

    #**kwargs把若干个关键字参数转化为字典格式
    def test3(**kwargs):
        print(kwargs)
        print(kwargs["name"])
        return 0
    
    
    def test4(name,age=18,**kwargs):
        print(name)
        print(kwargs)
        print(age)
        return 0
    
    test3(name='Yun',sex='man',age=21)
    
    test4('hehe',hobby='Tesla',sex='man',age=21)
    View Code

    3、全局与局部变量

    在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量
    全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
    当全局变量与局部变量同名时:
    在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。

    4.返回值 

    要想获取函数的执行结果,就可以用return语句把结果返回

    注意:

    1. 函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为 return 语句代表着函数的结束
    2. 如果未在函数中指定return,那这个函数的返回值为None 
    def test1():
        "test1"
        print("in the test1")
        logger()
        return
    def test2():
        "test2"
        print("in the test2")
        logger()
        return 0
    
    def test3():
        "test3"
        print("in the test3")
        logger()
        return 1,'hehe',[1,2],{'name':'yun'},test2
    
    x=test1()
    y=test2()
    z=test3()
    View Code

    5. 递归

    在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

    递归特性:

    1. 必须有一个明确的结束条件

    2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少

    3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

    def calc(n):
        print(n)
        if int(n/2) >0:
            return calc(int(n/2))
        print("----->",n)
    calc(10)
    View Code

    6.高阶函数

    变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

    def add(a,b,f):
        return a+f(b)
    
    res=add(3,-6,abs)
    print(res)
    View Code
    Great works are not done by strength, but by persistence!
  • 相关阅读:
    cnblog项目--20190309
    django js引入失效问题
    Python老男孩 day16 函数(六) 匿名函数
    Python老男孩 day16 函数(五) 函数的作用域
    Python老男孩 day15 函数(四) 递归
    Python老男孩 day15 函数(三) 前向引用之'函数即变量'
    Python老男孩 day15 函数(二) 局部变量与全局变量
    Python老男孩 day14 函数(一)
    Python老男孩 day14 字符串格式化
    Python老男孩 day14 集合
  • 原文地址:https://www.cnblogs.com/yunwangjun-python-520/p/9827805.html
Copyright © 2011-2022 走看看