• day10-函数基础知识


    函数

    什么是函数

    把工具事先准备好,然后下次使用的时候,直接使用就行了。我们的函数就是工具

    为何用函数

    1.遇到重复的功能只能重复编写实现代码,代码冗余
    2.功能需要扩展时,需要找出所有实现该功能的地方修改,扩展性差
    3.代码的组织结构不清晰,可读性差

    函数使用原则

    先定义,再调用。即一个函数分成两个阶段:定义阶段和调用阶段

    • 定义阶段:定义函数阶段只识别语法,不运行代码
    • 调用阶段:执行函数体代码

    定义函数

    # 语法
    def 函数名(参数1,参数2,参数3,...):
        """注释:用来解释声明函数功能"""
        函数体·
        return 返回的值
    
    # 可以用“函数名.__doc__()”来查看定义函数中的"""..."""
    

    函数名

    函数名类似于变量名,用来接收变量值;要具有某种意义;用字母、数字、下划线组成,不能以数字开头;且不能是关键字

    定义函数的三种方式

    拿比较两个数大小举例

    # 第一种定义方式:无参函数.在定义函数参数时不给定参数
    def sel_max():
        '''定义函数'''
        x, y = 10, 20
        if x > y:
            print(x)
        else:
            print(y)
    
    sel_max()        # 调用函数
    
    # 第二种方式:有参函数,需要根据外部传进来的参数,才能执行相应的逻辑,有几个参数,就必须传入几个参数
    def sel_max(x, y):
        if x > y:
            print(x)
        else:
            print(y)
            
    sel_max(100,299)
    
    # 第三种方式:空函数,设计代码结构。
    def sel_max():
        pass
    
    sel_max()
    
    20
    

    调用函数

    语法:函数名加括号,如 self_max()

    函数返回值

    def sel_max():
        pass
    result = sel_max()
    print(result)        # 无返回值
    
    None
    
    def sel_max():
        return 'nick'        # 返回一个值
    result = sel_max()
    print(result)        
    
    nick
    
    def sel_max():
        return 'nick',[1,2,3],20        # 返回多个值
    
    result = sel_max()
    print(result)
    
    ('nick', [1, 2, 3], 20)
    

    1. 无返回值时,默认返回 None

    2. return 1个值时,返回1个值,可以返回任意数据类型的数据

    3. return 多个值时,会以元组的形式把多个值包在一起,返回一个元组

    4. 函数体遇到return会终止函数,类似于while循环中的break语句

    函数的参数

    形参与实参

    定义函数中的参数称为形参,形参具有描述意义,类似于变量名,不为具体的数据类型
    调用函数中的参数称为实参,实参必须是具体分数据类型

    位置参数:按从左到右的顺序定义的参数

    • 位置形参:必选参数
    • 位置实参:按照位置给形参传值
    def compare(x,y):
        if x > y:
            return x
        return y
    print(compare(10,20))
    
    20
    

    关键字参数:按照key = value的形式定义的实参

    • 关键字参数必须在位置实参右面
    • 对同一个形参不能重复传值
    • 不需要按照位置为形参传值
    def compare(x=10,y=8):
        if x > y:
            return x
        return y
    print(compare())        # 在定义时给定了关键字参数,不需要再调用时赋值
    print(compare(y=20))        # 实参传值时,实参传的值会覆盖形参的值
    
    10
    20
    

    默认参数:在定义形参时为其赋值

    可以传值也可以不传值,经常需要变得参数定义成位置形参,变化较小的参数定义成默认参数(形参)

    def compare(x,y=8):
        if x > y:
            return x
        return y
    print(compare(10,y=20))        # 默认形参必须在位置形参后面
    
    20
    

    可变长参数:指的是实参值的个数不固定

    而实参有按位置和关键字两种形式定义,针对这两种形式的可变长,形参约定俗成用*args存放位置参数、用**kwargs来存放关键字参数

    def self_max(*args,**kwargs):
        print(args)  
        print(kwargs)  
    self_max(1,2,3,4,5,6,7,x=6,y=8,z=20,a=10,c=1000)
    
    (1, 2, 3, 4, 5, 6, 7)
    {'x': 6, 'y': 8, 'z': 20, 'a': 10, 'c': 1000}
    
    • args接受了所有位置实参,然后以元祖的形式保存下来,只接受位置参数,不接受关键字实参
    • kwarg接收所有的关键字实参,然后以字典的形式保存下来

    函数对象

    在python中,一切皆对象,函数也是一类对象,即函数可以当做数据传递,从而可实现函数的嵌套

    def self_max(x, y):  # x=1000,y=100
        if x > y:
            return x  # 100 # 返回一个值,给函数名 # return 任意数据类型的数据
        else:
            return y
        
    def max_4num(x, y, a, b):
        res1 = self_max(x, y)
        res2 = self_max(res1, a)
        return self_max(res2, b)
    res = max_4num(100,2000,2000,40000)
    print(res)
    
    40000
    
  • 相关阅读:
    理解SSL、HTTPS原理中的对称加密与非对称加密
    lib下的Jar包在项目打包的时候提示不能找不到
    springboot2.0 最大上传文件大小遇到的错误Failed to bind properties under 'spring.servlet.multipart.max-file-size'
    Executors创建线程池的几种方式以及使用
    JAVA深入研究——Method的Invoke方法(转)
    git merge 与 git rebase的区别
    git rebase
    git fetch , git pull
    nginx搭建(centos7)
    idea过期激活
  • 原文地址:https://www.cnblogs.com/863652104kai/p/10946209.html
Copyright © 2020-2023  润新知