zoukankan      html  css  js  c++  java
  • 函数

    函数

    • 函数只是一种思想,具体的实现都是靠if/while/for+变量,函数只是让你干活更轻松

    • 代码的一种组织形式

    • 用来对一项特定的功能进行打包封装,方便以后重复使用

    • 把冗余的代码独立开

    函数的使用

    • 定义函数:定义函数阶段只识别语法,不运行代码,所以即便里面本该报错的东西,也可能不会报错

    • 调用函数:调用函数才执行函数体代码

    函数的定义

    • 函数名的规范和变量名相同
    def 函数名():
        代码块  # 用来实现一个具体的功能
    
    • 定义函数
    def register():
        username = input('请输入需要注册的用户名')
        userpwd = input('请输入密码')
        
        with open(r'userinfo.txt', mode='a', encoding='utf-8') as fa:
            fa.write(f'
    {username}:{userpwd}')
    

    函数的调用

    • 函数名()即可
    register()
    

    函数文档

    • 函数的说明书
    • __doc__查看函数文档
    def login():
        '''用户登录功能'''            # 可以用__doc__查看到的信息
    	username = input('请输入你的帐号:').strip()
        userpwd = input('请输入你的密码:').strip()
        
        user_dict = dict()
        with open(r'userinfo.txt', mode='r', encoding='utf-8') as fr:
            for user in fr:
                user_list = user.strip().split(':')
    			user_dict[user_list[0]] = user_list[1]
        if user_dict.get(username) == userpwd:
            print('登录成功')
    
            
    login()
    

    1.无参函数

    def self_max():
        x, y = 10, 20
        if x > y:
            print(x)
        else:
            print(y)
    
    
    self_sum()
    
    20
    

    2. 有参函数

    • 有几个参数,在调用时就必须传入几个参数
    def sulf_max(x, y):
        if x > y:
            print(x)
        else:
            print(y)
            
    sulf_sum(10, 20)
    
    20
    

    3. 空函数

    • 想做一件事,但是目前还没有具体的想法,就先留一个地方,以后再写
    def self_max():
        pass
    

    返回值

    1. 函数名可以看做变量名,那么变量名是用来接收变量值的,函数名则是用来接收返回值的
    2. 默认返回None
    3. 返回值可以是任何数据类型,当return为多个值的时候,会以元祖的形式包起来
    4. 一旦代码走到return,那么就会终止下面所有的代码,类似于循环中的break
    def sulf_sum(x, y):
        if x > y:
            return x
        else:
            return y
            
    result = sulf_sum(10, 20)
    print(result)
    
    20
    

    函数的调用示例

    • Python中一切皆对象
    def self_max(x, y):
        if x > y:
            return x
        else:
            return y
        
    result = self_max(10, 100)
    result += 100
    print(result)
    
    200
    
    def max_4num(x, y, a, b):
        res1 = self_max(x, y)
        res2 = self_max(res1, a)
        # res3 = self_max(rel2, b)
        return self_max(res2, b)
    
    result = max_4num(4, 7, 100, 69)
    print(result)
    
    100
    

    参数

    1. 形参:在定义阶段的变量,被称之为形参,它具有描述意义,相当于变量名,不为具体的数据类型
    2. 实参:在调用阶段传入的参数,必须是具体的数据类型,相对而言类似于变量值,被形参接收
    ### 位置参数
    def self_max(x, y):
        if x > y:
            return x  # 如果返回的是x,那么下面的也不会打印
        print(666)
        print(233)
        return y
    
        
    x = 30
    max_num = self_max(x, 20)
    print(max_num)
    
    30
    

    默认参数

    • 在函数定义阶段,提前赋值给形参,在调用阶段可以不传入实参,但当实参传入值的时候,实参则会覆盖默认值
    • 必须在位置参数后面
    def guess_age(age=18):
        inp_age = input('猜一个年龄:')
        
        if inp_age == age:
            print('猜对了')
        else:
            print('猜错了')
            
    
    guess_age()
    
    猜一个年龄:16
    猜错了
    

    关键字参数

    • 在函数调用阶段,找到与形参的对应位置,并赋值给相应的形参,必须与形参名相同,可以不管顺序
    • 必须在位置参数后面
    def self_max(x, y):
        if x > y:
            return x
        else:
            return y
        
    result = self_max(y=10, x=100)
    print(result)
    
    100
    

    可变长参数(收集参数)

    形参部分

    • *args接受了所有的位置实参,然后以元祖的形式保存下来.只接受位置参数,不接受关键字参数.
    • **kwargs接受了所有的关键字实参,然后以字典的形式保存下来
    def self_num(*args, **kwargs):
        print(args)
        print(kwargs)
     
    
    self_num(1, 2, 3, 4, 5, f=6, g=7)
    
    (1, 2, 3, 4, 5)
    {'f': 6, 'g': 7}
    

    实参部分

    • *args 把这个列表/元祖内的元素一个一个取出来,然后一个一个传给函数(相当于解压缩)
    • **kwargs 会把字典打散成键值对的形式作为关键字实参传给函数
    def self_max(a, b, c, d, e, f=6, g=7):
        print(a, b, c, d, e, f, g)
        
    
    a = [1, 2, 3, 4, 5, 10]
    self_max(*a)
    
    a = [1, 2, 3, 4, 5]
    b = {'f':30, 'g':100}
    self_max(*a, **b)
    
    1 2 3 4 5 10 7
    1 2 3 4 5 30 100
    

    约定俗成

    • *后面写args,**后面写kwargs,这是一种约定俗成的规范

    可变长参数的混合使用

    • 位置实参和关键字实参都能接收且不限个数
    def f1(*args, **kwargs):
        print(*args, **kwargs)
       
    
    f1(1, 2, 3, 4, 5, f=6, g=7)
    

    收集参数混合调用的顺序问题

    • 收集参数,关键字参数,普通参数可以混合使用
    • 使用规则就是:普通参数和关键字参数优先,多余的参数打包
    • 定义的时候一般找普通参数,关键字参数,收集参数tuple,收集参数dict

    函数的解包问题(了解)

    def stu(*args):
        print("哈哈哈哈哈")
        # 主要用来调试
        for i in args:
            print(i)
            print ("*" * 30)
            
    l = ["wangerzhu", 19, 23, "lierniu"]
    stu(l)
    
    哈哈哈哈哈
    ['wangerzhu', 19, 23, 'lierniu']
    ******************************
    
    • 加一个星号
    stu(*l)
    
    哈哈哈哈哈
    wangerzhu
    ******************************
    19
    ******************************
    23
    ******************************
    lierniu
    ******************************
    
    • **kwargs也是一样,用**进行解包就可以了
  • 相关阅读:
    How can I pretty-print JSON in python?
    怎样取出cobbler kopts中设置的参数?
    提问的智慧
    mysql中binary相加的问题
    sql之left join、right join、inner join的区别
    js中数组遍历for与for in区别(强烈建议不要使用for in遍历数组)
    python setup.py uninstall
    Caused by: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
    idea中的插件,可以快速将类中的属性转换成Json字符串
    上传照片时候,可以通过配置文件和写配置类,实现控制上传文件的大小
  • 原文地址:https://www.cnblogs.com/lucky75/p/10946408.html
Copyright © 2011-2022 走看看