• 函数


    函数

    标签(空格分隔): py 函数


    函数返回值:

    • 返回值数=0,返回None
    • 返回值数=1,返回object
    • 返回值数>1,返回tuple

    函数的参数:

    1、关键字参数和位置参数

    def test(x,y):
        print (x)
        print (y)
    
    test (y=2,x=1) #关键字调用,与形参顺序无关
    test (1,2) #位置参数调用,与形参一一对应
    test (x=2,3) #执行报错,关键字参数不能写在位置参数前面
    test (3,x=2) #执行报错,不能给同一个参数重复赋值
    

    2、默认参数
    默认参数一定要用不可变对象,如果是可变对象,程序运行时会有逻辑错误!

    def test(x,y=2):
        print (x)
        print (y)
    test(1) #未对y赋值时,默认为2
    

    3、可变参数

    *args:函数内部接收N个位置参数,转换成元组的形式

    def test (*args):
        print (args)
    nums = [1,2,3,4,5]
    test (nums)
    test (*nums)
    #Python允许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去,*nums表示把nums这个list的所有元素作为可变参数传进去。这种写法相当有用,而且很常见
    

    **kwargs:接收N个关键字参数,转换成字典的方式

    def test2 (**kwargs):
        print (kwargs)
        print (kwargs['name'])
        print (kwargs['age'])
    test2 (name = 'frui', age = 27)
    test2 (**{'name':'frui','age':27})
    
    def test3 (name, **kwargs):
        print (name)
        print (kwargs)
    test3 ('frui',age = 27)
    
    def test4 (name, age = 18, **kwargs):
        print (name)
        print (age)
        print (kwargs)
    test4 ('frui', sex = 'm', hobby = 'rollerskating')
    test4 ('frui', sex = 'm', hobby = 'rollerskating', age = 27)
    test4 ('frui', 18, sex = 'm', hobby = 'rollerskating', age = 27)
    
    def test5 (name, age = 18, *args, **kwargs):
        print (name)
        print (age)
        print (args)
        print (kwargs)
    test4 ('frui', sex = 'm', hobby = 'rollerskating')
    test4 ('frui', sex = 'm', hobby = 'rollerskating')
    

    作用域、局部与全局变量

    1、全局与局部变量

    在子程序(函数)中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
    全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。

    当全局变量与局部变量同名时:
    在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。

    只有字符串和整数不能在局部变量中修改,其它数据类型如列表、字典、类等都可以

    name = ["ray", "tree"]
    def change_name ():
        name[0] = "frui"
    change_name()
    print (name)
    

    递归

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

    递归特性:

    1. 必须有一个明确的结束条件
    2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
    3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
    def calc(n):
        print (n)
        if int(n/2) > 0:
            return calc(int(n/2))
        print ("->",n)
    
    calc (10)
    

    高阶函数

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

    def add (x,y,f):
        return f(x) + f(y)
    
    res = add(3, -6, abs)
    print (res)
    
  • 相关阅读:
    Qt QCustomPlot 取数据,鼠标移动显示
    [Leetcode]Swap Nodes in Pairs
    [Leetcode]Sort Colors
    [Leetcode]Unique Paths
    [Leetcode]Find Minimum in Rotated Sorted Array
    [Leetcode]Merge Two Sorted Lists
    [Leetcode]Convert Sorted Array to Binary Search Tree
    [Leetcode]Unique Paths
    [Leetcode]Climbing Stairs
    [Leetcode]Remove Duplicates from Sorted List
  • 原文地址:https://www.cnblogs.com/sorui/p/6828555.html
Copyright © 2020-2023  润新知