Python基本语法(六)——函数

目录

一、什么是函数

二、定义函数的语法

三、函数的调用方法

3.1 基本用法

3.2 同时返回多个结果

3.3 多个变量接收函数返回的多个值

3.4 多参数输入(不定长)

3.5 变量作用域

3.6 函数的嵌套

四、匿名函数

4.1 匿名函数特点:

4.2 匿名函数用法


一、什么是函数

函数是组织好的,可重复使用的,用来实现单一,或者相关联功能的代码段

python有许多内建函数,用户也可以自定义函数

二、定义函数的语法

1) 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。

  • 名字最好能体现函数的功能,一般用小写字母和单下划线、数字等组合

  • 避免与内置函数重名(内置函数不需要定义即可直接使用)

2) 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数

  • 根据函数功能,括号里可以有多个参数,也可以不带参数,命名规则与函数名相同

3) 函数的第一行语句可以选择性地使用文档字符串,用于存放函数说明。

4)函数内容以冒号 “: ”起始,并且缩进。

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

  定义一个比较数据大小的函数

def max(a, b):
    if a > b:
        return a
    else:
        return b
 
print(max(4, 5))

>>>5

a = 4
b = 5
print(max(a, b))

>>>5

三、函数的调用方法

3.1 基本用法

       1)函数名(位置参数)

        直接使用参数(位置参数):输入函数名及参数所对应的值,注意此时需要注意需要按照顺序调用参数,如上面的 max(a,b)

      2)函数名(关键字形参)

        使用关键字调用参数,此时允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值,例:

def max(a, b):
    if a > b:
        return a
    else:
        return b
 
print(max(a=5, b=4))
print(max(b=4, a=5))
>>>5
>>>5

       3)return 语句

        用于退出函数,选择性地向调用方返回一个表达式。不带参数值的 return 语句返回 None。

       4)强制位置参数

        Python3.8 新增了一个函数形参语法 / 用来指明函数形参必须使用指定位置参数,不能使用关键字参数的形式。

        在以下的例子中,形参 a 和 b 必须使用指定位置参数,c 或 d 可以是位置形参或关键字形参,而 e 和 f 要求为关键字形参:

def f(a, b, /, c, d, *, e, f):  #“/”前的必须使用位置参数“*”后的必须使用形参
    print(a, b, c, d, e, f)

        正确用法

f(10, 20, 30, d=40, e=50, f=60)

        错误用法

f(10, b=20, c=30, d=40, e=50, f=60)   # b 不能使用关键字参数的形式
f(10, 20, 30, 40, 50, f=60)           # e 必须使用关键字参数的形式

3.2 同时返回多个结果

当一个函数同时返回多个结果时,此时获得的是一个元组,可以通过调用元组中特定数据的方法调取想要的数据;

3.3 多个变量接收函数返回的多个值

通过使用python提供的序列解包功能,直接使用多个变量接收函数返回的多个值,如

A,B,C = max(a,b)

3.4 多参数输入(不定长)

当参数数量不确定时,可以使用“*参数名”定义不定长参数加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数,如:

def printinfo( arg1, *vartuple ):
  # "打印任何传入的参数"
   print (arg1)
   print (vartuple)
 
# 调用printinfo 函数
printinfo( 70, 60, 50 )

>>>70        #第一个参数默认给arg1
>>>(60,50)   #后面两个参数以元组形式储存给vartuple

加了两个星号 ** 的参数会以字典的形式导入,如:

def printinfo( arg1, **vardict ):
   "打印任何传入的参数"
   print ("输出: ")
   print (arg1)
   print (vardict)
 
# 调用printinfo 函数
printinfo(1, a=2,b=3)

>>>
输出: 
1
{'a': 2, 'b': 3}

3.5 变量作用域

变量作用域指的是变量作用的范围

全局变量:被定义之后的在任何地方都可以被使用,一般在函数外被赋值;

局部变量:在函数内部被定义的变量(如上方所示的a,b),只能在函数内部使用

global()函数:将局部变量声明为全局变量,用法:

rent = 3000

def cost():
    global variable_cost         
    #将在cost()函数中定义的variable_cost变量定义为全局变量
    utilities = int(input('请输入本月的水电费用'))
    food_cost = int(input('请输入本月的食材费用'))
    variable_cost = utilities + food_cost
    print('本月的变动成本是' + str(variable_cost))

def sum_cost():
    sum = rent + variable_cost   
    #在cost()函数中定义的variable_cost变量可以在sum_cost()函数中使用
    print('本月的总成本是' + str(sum))

cost()
sum_cost()

3.6 函数的嵌套

被嵌套的函数的返回值参与到嵌套的函数中,如:

rent = 3000

def cost():
    utilities = int(input('请输入本月的水电费用'))
    food_cost = int(input('请输入本月的食材费用'))
    variable_cost = utilities + food_cost
    print('本月的变动成本是' + str(variable_cost))
    return variable_cost

def sum_cost():
    sum = rent + cost()     #sum_cost()嵌套了cost()的结果
    print('本月的总成本是' + str(sum))

sum_cost()

#输出结果为:sum = rent + variable_cost

四、匿名函数

4.1 匿名函数特点:

小型:函数通常只包含一行代码,这使得它们适用于编写简单的函数(可以具有任意数量的参数,但只能有一个表达式),这也意味着匿名函数占用内存小,计算快

匿名:普通函数不同,没有名称,只能通过赋值给变量或作为参数传递给其他函数来使用

4.2 匿名函数用法

创建方法:lambda语句,基本语法如下

lambda agruments:expression

#lambda 创建匿名函数的语句
#agruments 参数,可以是多个,也可以没有
#expression 函数表达式,只能有一个

实例:

无参数的lambda函数

f = lambda: "Hello, world!"
print(f())  # 输出: Hello, world!

>>>Hello, world!

单参数及多参数的lambda函数

x = lambda a : a + 10
print(x(5))

>>>15


x = lambda a, b : a * b
print(x(5, 6))

>>>30

lambda函数与map()函数结合,对列表元素进行批量函数运算,形成新列表

number = [1,2,3,4,5,6]
squared = list(map(lambda x:x**2,number))
print(squared)

>>>[1, 4, 9, 16, 25, 36]

lambda函数与filter()函数结合,对列表元素进行筛选,形成新列表

numbers = [1, 2, 3, 4, 5, 6, 7, 8]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  

>>>[2, 4, 6, 8]

lambda函数与reduce()函数结合,对列表元素进行持续计算(累加、累积、或其他特定函数持续运算等),得出结果

from functools import reduce    #使用reduce前需要从functools调用
number = [1,2,3,4,5,6]
sum1 = reduce(lambda x,y:x+y,number)          #累加
multiply1 = reduce(lambda x,y:x*y,number)     #累乘
num1 = reduce(lambda x,y:x*y+1,number)        #((((1*2+1)*3+1)*4+1)*5+1)*6+1

print(sum1)
print(multiply1)
print(num1)

>>>
21
720
1237

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值