zoukankan      html  css  js  c++  java
  • Python学习笔记:函数常用用法

    函数

    函数是为了达到某种目的而采取的行为,函数是可重复使用的,用来实现某个单一功能或者功能片段的代码块,简单来说就是由一系列的程序语句组成的程序段落。

    函数存在的意义:

    1. 提高代码的复用性
    2. 将复杂的逻辑简单化,分功能化

    函数名字最好能直接表示该函数的功能,多个单词之间用_链接。

    <def> <函数名>([参数列表])<:>
        # 待执行语句
        # 如果需要显式返回 <return 标识符> 或 <return>
    

    简单实例

    def func():
        print("Hello world!")
    
    print("程序正常执行")
    

    函数只有被调用了才会执行。

    # 调用函数 函数名 + ()
    func()
    
    # output
    func()
    Hello world!
    
    # 函数先调用后定义
    # 抛出异常 SyntaxError: invalid syntax
    # func()
    

    程序运行的时候先把函数内的代码加载到内存中,有调用的地方直接执行,先调用的时候程序还没有读取函数到内存中,所以抛出异常。

    print(func)
    <function func at 0x000000000AA4C510>
    # 直接打印函数对应的内存地址
    

    函数的返回值

    函数可以返回任何类型的数据,函数内执行到return后结束,后面代码不再执行。

    # 定义函数
    def func():
        res = 1 + 1
        print('我执行了!')
        return res
        print('我不会执行!')
        
    print('程序正常执行')
    func()
    
    # output
    程序正常执行
    我执行了!
    Out[5]: 2
    

    想要拿到函数return的值需要重新找个变量接收。

    res = func()
    我执行了!
    
    print(res)
    2
    

    不写return默认返回None。

    def func():
        res = 1 + 1
        print('我执行了!')
    
    res = func()
    print(res)
    
    # output
    我执行了!
    None
    

    多个返回值,需要多个变量接收。

    def func():
        return 1,2,3
    
    a,b,c = func()
    print(a,b,c)
    
    # output
    1 2 3
    
    

    一个变量也可以接收一个元组。

    def func():
        return 1,2,3
    
    res = func()
    print(res)
    
    # output
    (1, 2, 3)
    
    

    函数的参数

    计算两个数字之和。

    def sum_of_two():
        res = 3 + 4
        return res
    
    print(sum_of_two())
    
    # output
    7
    
    

    默认按位置传递参数,一一对应。

    def sum_of_two(num1, num2):
        res = num1 + num2
        return res
    
    print(sum_of_two(5, 6))
    
    # output
    11
    
    

    关键字传参,参数名对应。

    def sum_of_two(num1, num2):
        print(num1, num2)
        res = num1 + num2
        return res
    
    print(sum_of_two(num2 = 5, num1 = 6))
    
    # output
    6 5
    11
    
    

    混合使用,先位置参数再关键字参数。

    def sum_of_two(num1, num2, num3):
        print(num1, num2, num3)
        res = num1 + num2 + num3
        return res
    
    print(sum_of_two(3, num3 = 1, num2 = 2))
    
    # output
    3 2 1
    6
    
    

    默认值,不传递参数就用默认值,传递了就用传递的值。

    def sum_of_two(num1 = 1, num2 = 2):
        print(num1, num2)
        res = num1 + num2
        return res
    
    print(sum_of_two())
    print(sum_of_two(5, 10))
    
    # output
    1 2
    3
    5 10
    15
    
    

    混合使用时,先按位置传递参数,后按关键字传递参数,最后是默认值。

    ###### 错误写法 ######
    def sum_of_two(num1 = 1, num2, num3): # 默认值只能放最后
        print(num1, num2, num3)
        res = num1 + num2 + num3
        return res
    
    # output
    SyntaxError: non-default argument follows default argument
    # 编译语法错误
    
    ###### 错误写法 ######
    def sum_of_two(num1, num2, num3 = 3):
        print(num1, num2, num3)
        res = num1 + num2 + num3
        return res
    
    print(sum_of_two(num2 = 2, 3)) # 先位置,后关键字
    # output
    SyntaxError: positional argument follows keyword argument
    
    print(sum_of_two(1, num1 = 2)) # 不允许给同一个参数传递2个值
    # output
    TypeError: sum_of_two() got multiple values for argument 'num1'
    
    

    可变参数(多个不确定的参数)

    • *列表
    • **字典

    通常都是: *args、**kwargs

    # 传递列表
    def sum_of_two(*args):
        res = 0
        for i in args:
            res += i
        return res
    
    # 任意个 0个也可以
    print(sum_of_two())
    # output
    0
    
    print(sum_of_two(1,2,3,4,5))
    # output 
    15
    
    # 已有列表
    list_001 = [1,2,3,4,5]
    print(sum_of_two(*list_001))
    # output
    15
    # 列表会自动解释为多个参数
    
    
    # 传递字典
    def func(**kwargs):
        return kwargs
    
    print(func()) # {}
    print(func(name = 'Hider', age = 30)) # {'name': 'Hider', 'age': 30}
    print(func(**{'name': 'Hider', 'age': 30})) # {'name': 'Hider', 'age': 30}
    
    

    总体结合来看。

    def func(x,y,z,*args,**kwargs):
        print(x)
        print(y)
        print(z)
        print(args)
        print(kwargs)
        
    func(1,2,3,4,5,6,a=11,b=22)
    
    # output
    1
    2
    3
    (4, 5, 6)
    {'a': 11, 'b': 22}
    
    
    • 可变类型参数的传递,列表中第1个值被函数修改。

    可以实现实参传递给形参,形参发生改变,实参跟着发生改变。

    def func(li):
        li[0] = 666
    
    li = [1,2,3,4,5]
    func(li)
    print(li)
    
    # output
    [666, 2, 3, 4, 5]
    
    
    • 不可改变类型的传递
    def func(str1):
        str1 = 'aaa'
        print('函数内:', str1)
    
    str1 = 'hello'
    func(str1)
    print(str1)
    
    # output
    函数内: aaa
    hello
    
    
    • 全局变量和局部变量

    局部可以使用全局变量,局部变量是在函数内部声明并使用的数据变量,随函数的启动而出生,随函数的退出而消亡,作用域只在函数内。

    # 局部可以使用全局变量
    temp = 'hello'
    def func():
        print(temp)
    
    func() # hello
    
    
    # 全局不能使用局部变量
    def func():
        temp = 'hello'
        print(temp)
    
    func() # hello
    
    print(temp) # NameError: name 'temp' is not defined
    
    
    # 结合应用
    temp = '你好'
    def func():
        temp = 'hello'
        print(temp)
    
    print(temp)
    # output
    你好
    
    
    temp = '你好'
    def func():
        temp = 'hello'
        print(temp)
        
    func()
    print(temp)
    
    # output
    hello
    你好
    
    num = 1
    def set_num(in_num):
        num = in_num
        print(num)
        pass
    
    set_num(11)
    print(num)
    
    # output
    11
    1
    
    

    声明使用全局变量(global)

    num = 1
    def set_num(in_num):
        global num
        num = in_num
        pass
    
    set_num = 11
    print(num)
    
    # output
    1
    
    

    全局变量,局部变量重名,仍需要用全局变量。

    num = 11
    def func():
        num = 22
        print(num)
        print(globals()['num'])
    
    # output
    func()
    22
    11
    
    

    参考链接:Python中的基本函数及其常用用法简析

  • 相关阅读:
    CSS 学习资源 W3C school
    嵌入式计算机与PC机的区别
    Javascript:新消息闪烁标题提示代码分享 (转)
    有源RFID与无缘RFID的区别
    event.X和event.clientX有什么区别
    什么是射频耦合和射频补偿?
    【转】js日期时间函数
    JQuery操作cookie插件
    js操作cookie (转)
    UIM卡
  • 原文地址:https://www.cnblogs.com/hider/p/12940608.html
Copyright © 2011-2022 走看看