zoukankan      html  css  js  c++  java
  • Python基础学习11--函数

    函数

    代码的一种组织形式,一个函数一般完成一项特定的功能

    函数的使用:

    1. 函数需要先定义
    2. 使用函数,俗称调用

    定义一个函数:

    函数的定义部分不会被执行

    • def关键字,后跟一个空格
    • 函数名,自己定义,起名需要遵循便令命名规则,约定俗成,大驼峰命名只给类用
    • 后面括号和冒号不能省,括号内可以有参数
    • 函数内所有代码缩进

    语法

    def 函数名(参数列表):
        函数体

    实例:

    def func1():     # 定义函数,此处未传参数
        print('这就是函数!')
        print('我不玩了。')
    
    func1()          # 函数的调用

    输出如下:

    这就是函数!
    我不玩了。

    函数的参数与返回值

    参数

     负责给函数传递一些必要的数据或者信息

    • 形参(形式参数): 在函数定义的时候用到的参数没有具体值,只是一个占位的符号,称为形参
    • 实参(实际参数): 在调用函数的时候输入的值

    实例:

    # 参数的定义与使用:
    def func2(hello):        # hello为形参,无实质作用,仅代表调用时需要填入某一数据
        print('{},猜猜我是谁'.format(hello))
    
    func2('Hi')              # func()函数传入实参'Hi',调用时 实参(Hi) 会代替 形参中的所有(hello)
    
    # 如果写入形参,调用时未填入实参,会报错!
    func2()

    输出结果如下:

    Hi,猜猜我是谁
    
    TypeError: func2() missing 1 required positional argument: 'hello'
           func2()缺少一个必需的位置参数:'hello'

    返回值

     函数的执行结果

    • 使用return关键字
    • 如果没有return,默认返回一个None
    • 函数一旦执行return语句,则无条件返回,即结束函数的执行

    实例:

    # 函数返回值,一般用于函数末尾
    def func2(one,two):
        num = one + two
        if num > 10:
            print(num,'> 10')
            return '大于10'
        else:
            print(num,'< 10')
            return '小于10'
    
        print('你猜我会被print出来吗?')        # 在pycharm中,该行会被底色标注
    
    res = func2(5,8)
    print(res)

     输出结果如下:

    13 > 10
    大于10
    
    # return后面的语句不会被打印出来

    参数详解

    参数分类

    • 普通参数
    • 默认参数
    • 关键字参数
    • 不定长参数

    普通参数

    • 定义的时候直接定义变量名
    • 调用的时候直接把变量或者值放入指定位置
    # 定义函数
    def 函数名(参数1, 参数2,....):
        函数体
    
    # 调用函数
    函数名(value1, value2, .......)    # 严格按位置赋值

    默认参数

    • 形参带有默认值
    • 调用时,如果没有对相应形参赋值,则使用默认值
    # 定义函数
    def 函数名(参数1, p2 = v2,....):
        函数体
    
    # 调用1
    函数名(value1)
    # 调用2
    函数名(value1, value2)

    实例:

    def func3(name,age = 18):    # 定义函数func3(),其中age参数默认为18
        print('My name is',name)    
        print(age,'years old')
    
    func3('落晨')
    print('-' * 33)     # 分隔符
    func3('落晨',25)

    输出结果如下:

    My name is 落晨
    18 years old
    ---------------------------------
    My name is 落晨
    25 years old

    关键字参数

    # 定义函数
    def
    函数名(p1, p2, p3, ...): 函数体
    # 调用函数 函数名(p1
    =v1, p2=v2, p3=v3, ...)  #

    缺点:

    • 调用时会比较麻烦

    优点:

    • 参数传输不易混淆;普通参数的形参、实参的位置必须一一对应,易出错
    • 使用关键字参数,无需考虑参数的位置

    实例:

    def func4(name,age):
        print('My name is',name)
        print(age,'years old')
    
    func4(age=18, name='落晨')

    输出结果如下:

    My name is 落晨
    18 years old

    不定长参数

    撸代码时,可能调用时的实参比预留的形参更多,此时我们就需要用到不定长参数

    # 定义函数
    def
    函数名(*args): 函数体
    # 调用函数 函数名(v1, v2, v3, ...)
    • 参数名 args 不是必须这么写,但是,我们推荐直接用 args,约定俗成
    • 参数名 args 前需要由星号,加星号的参数会以元组的类型进行导入
    • 不定长参数可以和其他参数共存

    实例:

    def func5(*args):
        print(type(args))
        print('-' * 10)
        print('我要输出args:',args)
    
    func5('落晨',18,'不知道写啥了')

    输出结果如下:

    <class 'tuple'>
    ----------
    我要输出args: ('落晨', 18, '不知道写啥了')

    不定长参数--关键字参数

      把关键字参数按字典格式存入收集参数

    # 定义函数
    def 函数名(**kwargs):    # 两个星号
        函数体
    
    # 调用函数
    函数名(p1=v1, p2=v2, p3=v3, ...)
    • kwargs一般约定俗成这样写
    • 调用的时候,把多余的关键字参数放入kwargs
    • 访问kwargs需要按字典格式访问

    实例:

    def func6(**kwargs):
        print(type(kwargs))
        print('-' * 10)
        print('我要输kwargs:',kwargs)
    
    func6(name='落晨',age=18,other='不知道写啥了')

    输出结果如下:

    <class 'dict'>
    ----------
    我要输kwargs: {'name': '落晨', 'age': 18, 'other': '不知道写啥了'}

    不定长参数--混合调用

    • 收集参数,关键字参数,普通参数可以混合使用
    • 使用规则就是,普通参数和关键字参数优先
    • 定义的时候一般按照 普通参数,关键字参数,不定长参数tuple,不定长参数dict 的顺序
    def func7(name, age, *args, hobby="None", **kwargs):
        print('Hi,everybody!')
    
        print('My name is {0}, {1} years old'.format(name,age))
    
        print('I like animals, such as',args,'and so on')
    
        if hobby == None:
            print('I have no hobbies.')
        else:
            print('I love to {0}.'.format(hobby))
    
        print('And my other hobbies :',kwargs)
    
    func7('落晨',18,'monkeys','cats','dogs',hobby='sleeping',hobby2='music',hobby3='laughter')

    输出结果如下:

    Hi,everybody!
    
    My name is 落晨, 18 years old
    
    I like animals, such as ('monkeys', 'cats', 'dogs') and so on
    
    I love to sleeping.
    And my other hobbies : {'hobby2': 'music', 'hobby3': 'laughter'}

    不定长参数--解包

      把参数放入list或者字典中,直接把list/dict中的值放入收集参数中

    def func8(*args):
        for i in args:
            print(i)
    
    l = ['落晨', 18, '睡觉']
    func8(l)
    print('-' * 10) func8(*l)        # 传参时加上 * 号,可以进行解包

    输出结果如下:

    ['落晨', 18, '睡觉']  # 如果想将列表中的元素逐一打印出来,显然直接调用是行不通的 ---------- 落晨 18 睡觉

    对dict类型进行解包,需要用两个星号

    返回值

    • 函数和过程的区别

          有无返回值

    • 需要用return显示返回内容,
    • 如果没有返回,则默认返回None
    • 推荐写法,无论有无返回值,最后都要以return 结束
    def func9():
        print("我这有返回值")
        return 1
    
    def func10():
        print("我没有返回值")
    
    f1 = func9()
    print(f1)
    
    print('-' * 15)
    
    f2 = func10()
    print(f2)

    输出如下:

    我这有返回值
    1
    ---------------
    我没有返回值
    None
  • 相关阅读:
    Top 10 Product Manager Skills To Boost Your Resume In 2021
    大数据知识梳理
    B端产品如何设计权限系统?
    华三盒式交换机MAC、ARP、Route性能表项参数查询
    中了传说中的挖矿病毒
    SqlServer 2019 事务日志传送
    docker中生成的pdf中文是方框的解决方案
    The Live Editor is unable to run in the current system configuration
    2021 面试题大纲
    五分钟搞定Docker安装ElasticSearch
  • 原文地址:https://www.cnblogs.com/wilson-5133/p/10356758.html
Copyright © 2011-2022 走看看