Python中关于“函数”的学习

一、函数的定义和调用

1.定义函数

自定义函数的语法格式如下所示在 Python 中,你可以定义一个自己想要功能的函数,

基于上述格式,下面对函数定义的规则进行说明:

(1).函数代码块以 def 开头,后面跟的是函数名和(参数列表)。

(2).函数名的命名规则跟变量的命名规则是一样的,即只能是字母、数字和下划线的任何组合,且不能以数字开头,并且不能跟关键字重名。

(3).函数的参数必须放在圆括号中。

(4).函数的第1行语句可以选择性地写文档字符串来存放函数说明,函数说明一般用一对三个单引号或三个双引号都行,它和 注释# 一个道理,都不是真正运行的程序。

(5).函数内容以冒号起始,并且缩进。

(6).return 表达式结束函数,选择性地返回一个值给调用方。不带表达式的 return 相当于返回 None.

接下来,我们定义一个能够完成打印信息的函数,例:

def greet(name):  # 定义一个name形参,被用于接受值
    """这是一个打招呼的函数"""
    print("初次见面。")
    return "你好,{}!".format(name)
    # 用str.format字符串格式化,{}用于存放最终生成greet变量插入的值

print(greet("世界"))

print(greet)函数调用之完,打印“初次见面”。然后,返回一个字符串格式化的name 传到下面要调用的print函数。

调用结果。

二、函数的参数

理解函数的参数作用前,补充两个概念:形参和实参

(1).形参(形式参数)

形参是在函数定义时使用的变量,用于接收传递给函数的值。

形参只在函数内部有效,它们是局部变量。

形参在函数被调用之前不占用内存中的具体存储位置。

(2).实参(实际参数)

实参是在函数调用时传递给函数的值。

实参可以是常量、变量、表达式或任何可以计算为值的东西,实参的值在函数调用时被传递给对应的形参。

1.函数参数的传递

现在结合上面的例子,学习“函数参数的传递”,比如:计算两个数的和,并打印计算结果

def add():
    c = 2 + 3
    print(c)
add()

这里由于固定计算两个的数值,无论调用多少次add( ),结果都是5,使得该函数很局限。

因此,为了能让定义的函数更加通用,可以任意计算两个数字的和,就在定义函数的时候添加两个参数,让这两个参数来接收传递给函数的值。

# 定义两个接收传递的参数 a和b
def add(a, b):
    c = a + b
    print(c)

# 调用带有参数的函数
add(3, 4)

现着我们可以计算任意两个数字的和,其他运算法则与此类似。此外,要注意定义传递几个参数,就调用几个参数。

2.默认参数

定义函数时,可以给函数的参数设置默认值,这个参数被称为默认参数,当调用函数时,由于默认参数在定义时已经被赋值,所以可直接调用,而其它参数(如:不是被定义的函数参数)是必须传入值的。如果默认参数没有传入值,则直接使用默认的值。如果默认参数传入了值,则使用传入的新值替代原来的默认值。

举个栗子:

def animal_info(name, characteristic="troublemaker"):
    # 定义带有两个参数的animal_info函数
    print("Name: ", name)
    print("Characteristic: ", characteristic)
    '''以上代码中,name参数没有默认值,characteristic参数
    有默认值troublemaker'''

python = 'snake'  # 这是没设置默认值的参数/变量

animal_info(name="cat")
# 调用animal_info函数,只给name参数传入值,而characteristic参数则会用默认值“troublemaker”
animal_info(name="turtle", characteristic="drawing!")
# 调用animal_info函数,给name参数和characteristic参数都传入新的值

还要注意的是:带有默认值的参数要一定要位于参数列表的末尾,否则会报错!

3.不定长参数

通常我们确定的参数个事不确定或比较多,此时可以在函数中使用不定长参数(可理解为不确定长度的参数)。语句格式如下:

在上述语句格式中,函数名后面共有3个参数。其中,formal_args 为形参(也就是前面所用的参数,如a,b),*args 和**kwargs 为不定长参数。当调用函数的时候,函数传入的参数个数会优先匹配formal_args参数的个数。如果传入的参数个数和 formal_args 参数的个数相同,不定长参数会返回空的元组或字典。如果传入参数的个数比formal_args 参数的个数多,可以分为如下两种情况:

(1)如果传入的参数没有指定名称,那么 *args 会以元组的形式存放这些多余的参数。

(2)如果传入的参数指定了名称,如 m=1,那么**kwargs 会以字典的形式存放这些被命名的参数,如 { m :1}

举个栗子:

def num(a, b, *args)  # *args是不定长参数
    print(a)
    print(b)
    print(*args)

num(1,2,3)  # 调用1,2,3

在输出结果中,(3,)表示 *args 接收到了一个包含单个元素3 的元组。如果调用 num(1,2,3,4),则*args 将是一个包含两个元素的元组:(3,4)。

如果在参数列表末尾加上**kwargs参数:

def num(a, b, *args, **kwargs): 
    # *args、**kwargs是不定长参数
    print(a)
    print(b)
    print(args)
    print(kwargs)

num(1, 2, 3, 4, 5, 6)
# 调用1、2、3、4、5、6

可以看到此时,调用函数num传入了多个数字,从左到右依次匹配完a,b,其余全配不定长参数*args,不定长参数**kwargs 没收到任何数据,所以为‘空字典’

def num(a, b, *args, **kwargs): 
    # *args、**kwargs是不定长参数
    print(a)
    print(b)
    print(args)
    print(kwargs)

num(1, 2, 3, 4, x=5, y=6)
# 调用1、2、3、4、5、6

 现在给 **kwargs参数 调用’5’和’6’ 

可以发现,如果我们的参数有以键值对的形式传入,那么就会被 **kwargs参数 接收。

三、函数的返回值

在Python中,函数的返回值用return 语句来执行。它的作用是结束当前函数的执行,并将结果返回给调用者。如果一个函数没有 return 语句,或者 return 语句没有指定返回值(即 return 后面没有值),那么函数将返回默认值 None。例:

def add(a, b):
    c = a + b
    if c < 0:
        return  # a+b小于0 就返回空值None
    return c   # a+b>0 就正常返回和的结果

print(add(1, -2))

因为1+(-2) < 0 , 返回结果如下:

四、函数的分类

根据有没有参数和返回值,函数大概可以分为以下四种类型:

(1)函数无参数、无返回值(没钱白给型)

通过一个打印函数示例:(想啥来啥,写个快乐!)

def display_menu():
    print("-----Order_System-----")
    print("Fried rice with egg")
    print("Curry rice")
    print("Fish ball soup")
    print("Mushroom soup")
    print("Fried eggplant")
    print("soda")
    print("pudding")
display_menu()

无参数、无返回值的函数,既不能接收也没有返回值。

调用展示菜单。

(2)函数无参数、有返回值(没钱白嫖型)

此类函数类型,一般用于采集数据、调查概率之类的情况会比较常用。

def get_price():
    return float(input("你的预算: "))  # 假定你输入的数作为返回值

total_price = get_price()
print("总共消费:", total_price)

 可以看到get_price( )里面没参数

 

打印结果......(p^  o ^p)

(3)函数有参数、无返回值。

这个类型比较少用吧,通常作为定义了模块,传入了参数,是希望有返回值的。

def person(a, b):
    piece = a + "、" + b
    print("用餐人员:{}".format(piece))

person("小明", "小红")

这里只算有定义和调用,没有明显的return,就不叫有返回值,或者就写个return后面不接任何东西,也会返回None。

调用结果。

(4)函数有参数、有返回值。

一般有参数、有返回值的函数,是我们会经常用到的。

举例:

while True:
    def friend(num):
        num *= 1.5  # 一般讲究菜数为人数的1.5倍
        return num  # 返回给下面变量piece的调用

    num = int(input("请输入用餐人数:"))  # 人数应当是整的
    piece = friend(num)
    print("一共点", int(piece), "道菜。")  # 菜数也应当是整的

代码逻辑如下:

1.def friend(num):定义了一个名为 friend 的函数,它接受一个参数 num。

2.num *= 1.5 将传入的 num 参数乘以 1.5。这里使用的是乘法赋值运算符 *=,它等同于 num =num * 1.5。

3. return num 将乘以 1.5 之后的 num 返回。此时,num 代表的是菜品数。

4.num = int (input(”请输入用餐人数:”)) 这行代码请求用户输入用餐的人数,并将输入的字符串转换为整数类型,存储在变量 num 中。

5.piece = friend(num) 调用 friend 函数,并将输入的人数num 作为实参传递给函数。函数处理后返回的菜品数赋值给变量 piece。

6.print("一共点”,int(piece),"道菜。”)打印输出最终的菜品数。由于 friend 函数返回的是一个浮点数,这里通过 int(piece)将浮点数转换为整数,以确保输出的菜品数是整数值。

综上所述,输入的num作为实参传递给 friend 函数,函数处理后返回的 num(此时代表菜品数)再传递给变量 piece,最后打印出来。这个过程中,num 先是作为用餐人数的输入,然后通过函数处理得到菜品数,最后输出。

用了while True 循环,所以你可以输入很多次

P.S.

还有很多函数,后续用到再慢慢balabala....

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值