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
  • 相关阅读:
    LG2664 树上游戏
    「NOI2007」 货币兑换
    「NOI2012」骑行川藏
    LG4721 【模板】分治 FFT
    LG4783 【模板】矩阵求逆
    test20181019 B君的第二题
    LOJ129 Lyndon 分解
    「NOI2017」泳池
    LG4723 【模板】常系数线性递推
    「AHOI / HNOI2017」礼物
  • 原文地址:https://www.cnblogs.com/wilson-5133/p/10356758.html
Copyright © 2011-2022 走看看