概述
文章目录
- 第11章 函数设计
- 11.1 Python函数基本概念
- 11.1.1 函数的定义
- 11.1.2 没有输入参数没有返回值的函数
- 11.2 函数的参数设计
- 11.2.1 传递一个参数
- 11.2.2 多个参数传递
- 11.2.3 参数默认值的处理
- 11.3 函数返回值
- 11.3.1 返回None
- 11.3.2 简单返回数值数据
- 11.3.3 返回多种数据
- 11.3.4 简单返回字符串数据
- 11.4 调用函数时参数为列表
- 11.5 传递任意数量的参数
- 11.5.1 传递并处理任意数量的参数
- 11.5.2 设计含有一般参数与任意数量参数的函数
- 11.6 局部变量与全局变量
- 11.6.1 全局变量的使用范围
- 11.6.2 局部变量与全局变量同名
- 11.6.3 程序设计的注意事项
- 11.7 匿名函数lambda
第11章 函数设计
11.1 Python函数基本概念
11.1.1 函数的定义
函数的语法格式如下:
def 函数名称(参数值1[,参数值2,...]):
""" 函数注释(docstring)"""
程序代码段
return [返回值1,返回值2, ...] # 中括号可有可无
- 函数名称。名称必须是唯一的,程序将来可以呼叫引用。
- 参数值。参数值可有可无,视函数设计需要而定,可接收呼叫函数传来的变量,各参数之间用逗号“,”隔开。
- 函数注释。函数注释可有可无,为加强程序可读性,通常会加上注释以说明函数的功能,有多行注释时用3个双引号(或单引号)括起来。
- return [返回值1,返回值2,…]。不论是return还是右边的返回值都是可有可无的。如果有多个返回数据,需要用逗号“,”隔开。
11.1.2 没有输入参数没有返回值的函数
程序实例:
# 定义一个函数
def greeting():
"""第一个Python函数设计"""
print("Hello world")
# 主程序
greeting()
执行结果:
Hello world
11.2 函数的参数设计
11.2.1 传递一个参数
程序实例:
# 定义函数
def greeting(name):
"""传递1个参数的函数设计"""
print("Hello,", name)
greeting('James')
执行结果:
Hello, James
11.2.2 多个参数传递
设计的函数需要传递多个参数时,调用此函数时需要注意传递参数的位置是否正确。常见的传递参数为数值或字符串数据,有时也会需要传递列表、元组或字典。
程序实例:
def subtract(m, n):
"""减法设计"""
result = m - n
print(result)
print("本程序将执行a-b的运算")
a = int(input("a = "))
b = int(input("b = "))
print("a - b = ", end="") # 输出a-b字符串,接下来的输出不换行
subtract(a, b)
执行结果:
11.2.3 参数默认值的处理
在设计函数时,可以给参数一个默认值,若调用该函数时没有设置参数值,则会采用默认值。需要注意的是:函数设计时,含有默认值的参数必须放在参数列表的最右边
,否则会出错。
程序实例:
# 定义函数
def greeting(name = 'python'):
"""传递1个参数的函数设计"""
print("Hello,", name)
greeting('James')
greeting()
执行结果:
Hello, James
Hello, python
11.3 函数返回值
11.3.1 返回None
当设计函数时没有“return [返回值]”部分时,Python在直译时会自动返回处理成“return None”,相当于返回None。None在Python中独立成为一个数据类型:NoneType。
程序实例:
# 定义函数
def greeting(name = 'python'):
"""传递1个参数的函数设计"""
print("Hello,", name)
ret_value = greeting()
print("greeting()返回值为:", ret_value, ",数据类型为:", type(ret_value))
执行结果:
Hello, python
greeting()返回值为: None ,数据类型为: <class 'NoneType'>
当函数设计时有return,但没有返回值时,Python也将自动处理成return None。
程序实例:
# 定义函数
def greeting(name = 'python'):
"""传递1个参数的函数设计"""
print("Hello,", name)
return
ret_value = greeting()
print("greeting()返回值为:", ret_value, ",数据类型为:", type(ret_value))
执行结果:
Hello, python
greeting()返回值为: None ,数据类型为: <class 'NoneType'>
11.3.2 简单返回数值数据
参数具有返回值功能,可以大大增加程序的可读性。
程序实例:
def subtract(x1, x2):
"""减法设计"""
result = x1 - x2
return result # 返回减法结果
print("本程序将执行a - b的运算")
a = int(input("a = "))
b = int(input("b = "))
print("a - b = ", subtract(a, b)) # 输出a-b字符串和结果
执行结果:
11.3.3 返回多种数据
使用return返回函数数据时,允许返回多种数据,各种数据之间以逗号”,“隔开。
程序实例:
def multifunction(x1, x2):
"""加减乘除四则运算"""
result_add = x1 + x2
result_sub = x1 - x2
result_mul = x1 * x2
result_div = x1 / x2
# 返回加、减、乘、除的结果
return (result_add, result_sub, result_mul, result_div)
x1 = x2 = 10
add, sub, mul, div = multifunction(x1, x2)
print("加法结果:", add)
print("减法结果:", sub)
print("乘法结果:", mul)
print("除法结果:", div)
执行结果:
加法结果: 20
减法结果: 0
乘法结果: 100
除法结果: 1.0
11.3.4 简单返回字符串数据
程序实例:
def findByKey(k, dic = set()):
boolean = k in dic
if boolean == True:
result = '是该集合的成员'
else:
result = '不是该集合的成员'
return result
res1 = findByKey(1, {1, 3, 5, 7, 9})
res2 = findByKey('apple', {'orange', 'pear'})
print(res1)
print(res2)
执行结果:
是该集合的成员
不是该集合的成员
11.4 调用函数时参数为列表
在调用函数时,可以将列表(可以是由数值、字符串或字典组成)作为参数传递给函数,然后函数可以遍历列表内容,执行更进一步操作。
程序实例:
def mail_msg(recipients):
str1 = '尊敬的用户:'
str2 = '恭喜您被天上掉下来的馅饼砸中!快来看看吧!'
str3 = '404'
for recipient in recipients:
msg = str1 + recipient + 'n' + str2 + 'n' + str3
print(msg, 'n')
members = ['声微饭否', '奇怪的打野', 'bug搬运工']
mail_msg(members)
执行结果:
尊敬的用户:声微饭否
恭喜您被天上掉下来的馅饼砸中!快来看看吧!
404
尊敬的用户:奇怪的打野
恭喜您被天上掉下来的馅饼砸中!快来看看吧!
404
尊敬的用户:bug搬运工
恭喜您被天上掉下来的馅饼砸中!快来看看吧!
404
11.5 传递任意数量的参数
11.5.1 传递并处理任意数量的参数
在设计函数时,可能会遇到多个参数传递到该函数的情况。
程序实例:
# “*”表示可以有1个或多个参数传递到此函数中
def make_icecream(*toppings):
print("这个冰淇淋所加配料如下:")
for topping in toppings:
print("--- ", topping)
make_icecream('草莓酱')
make_icecream('草莓酱', '奶油', '巧克力')
执行结果:
这个冰淇淋所加配料如下:
--- 草莓酱
这个冰淇淋所加配料如下:
--- 草莓酱
--- 奶油
--- 巧克力
11.5.2 设计含有一般参数与任意数量参数的函数
程序设计时,会遇上需要传递一般参数与任意数量参数的情况,这时任意数量的参数必须放在最右边。
程序实例:
# “*”表示可以有1个或多个参数传递到此函数中
def make_icecream(icecream_type, *toppings):
print(icecream_type,"冰淇淋所加配料如下:")
for topping in toppings:
print("--- ", topping)
make_icecream('香草', '草莓酱')
make_icecream('芒果', '草莓酱', '奶油', '巧克力')
执行结果:
香草 冰淇淋所加配料如下:
--- 草莓酱
芒果 冰淇淋所加配料如下:
--- 草莓酱
--- 奶油
--- 巧克力
11.6 局部变量与全局变量
如果某个变量只能在函数内使用,影响范围限定在这个函数内,那么这个变量就称为局部变量(local variable)。如果某个变量的影响范围是整个程序,则这个变量称为全局变量(global variable)。
Python程序在调用函数时,会创建一个内存工作区间,在这个内存工作空间可以处理属于这个函数的变量。当函数工作结束,返回原先呼叫程序时,这个内存工作区间就被收回,原先存在的变量也将被销毁,因此局部变量的影响范围只限定在所属的函数内。
对于全局变量而言,一般是在主程序内创建。程序在执行时,不但主程序可以引用,所有属于这个程序的函数也可以引用,因此它的影响范围是整个程序。
11.6.1 全局变量的使用范围
一般在主程序内创建的变量称为全局变量,这个变量可以被主程序以及程序内的所有函数引用。
程序实例:
def printmsg():
print("函数打印:",msg)
msg = 'Hello world' # 设置全局变量
print("主程序打印:", msg)
printmsg() # 调用函数
执行结果:
主程序打印: Hello world
函数打印: Hello world
11.6.2 局部变量与全局变量同名
如果全局变量与函数内的局部变量使用相同的名称,那么,在局部变量所在的函数中使用局部变量的内容,其它区域则使用全局变量的内容。
程序实例:
def printmsg():
msg = 'Hello, python'
print("函数打印:",msg)
msg = 'Hello world' # 设置全局变量
print("主程序打印:", msg)
printmsg() # 调用函数
执行结果:
主程序打印: Hello world
函数打印: Hello, python
11.6.3 程序设计的注意事项
一般程序设计时,有关使用局部变量需要注意以下几点,否则程序会有错误产生。
- 局部变量内容无法在其他函数引用。
- 局部变量内容无法在主程序引用。
- 一般在函数内不能修改全局变量的值,除非在函数内使用global声明此变量。
程序实例:
def printmsg():
global msg # 使用global声明全局变量
msg = "php" # 更改全局变量
print("更改后:", msg)
msg = "Python"
print("更改前:", msg)
printmsg()
执行结果:
更改前: Python
更改后: php
11.7 匿名函数lambda
匿名函数是指没有名称的函数,Python使用def来定义一般函数,使用lambda来定义匿名函数。匿名函数的最大特点是可以有许多参数,但只能有一个程序代码语句,可以将执行结果返回。
lambda arg1[, arg2, ..., argn]:expression # arg1是参数,可以有多个参数
程序实例:
# 单一参数的匿名函数
# 定义lambda函数
square = lambda x: x**2 # 返回平方值
print(square(5))
# 多个参数的匿名函数
add = lambda a,b: a+b # 返回a+b的和
print(add(3, 8))
执行结果:
25
11
- lambda的参数形式
# 1.无参数
fn1 = lambda: 10
print(fn1()) # 10
# 2.一个参数
fn2 = lambda a: a
print(fn2('hello')) # hello
# 3.默认参数/缺省参数
fn3 = lambda a, b, c = 10: a + b + c
print(fn3(1, 3)) # 14
# 4.可变参数:*args
# 返回值为元组
fn4 = lambda *args: args
print(fn4(1, 2, 3)) # (1, 2, 3)
# 5.可变参数:**kwargs
# 返回值为字典
fn5 = lambda **kwargs: kwargs
print(fn5(name='Tom', age=18, gender='female')) # {'name': 'Tom', 'age': 18, 'gender': 'female'}
print(fn5(age=13)) # {'age': 13}
- lambda的应用示例:
# 1.带判断的lambda
fn1 = lambda a, b: a if a > b else b
print(fn1(9, 3)) # 9
print(fn1(1, 2)) # 2
# 2.列表数据按字典key的值排序
students = [
{'name': 'Tom', 'age': 20},
{'name': 'Judy', 'age': 18},
{'name': 'Lucy', 'age': 28}
]
# 按name值升序排列
students.sort(key=lambda x: x['name'])
print(students)
# [{'name': 'Judy', 'age': 18}, {'name': 'Lucy', 'age': 28}, {'name': 'Tom', 'age': 20}]
# 按name值降序排列
students.sort(key=lambda x: x['name'], reverse=True)
print(students)
# [{'name': 'Tom', 'age': 20}, {'name': 'Lucy', 'age': 28}, {'name': 'Judy', 'age': 18}]
# 按age值升序排列
students.sort(key=lambda x: x['age'])
print(students)
# [{'name': 'Judy', 'age': 18}, {'name': 'Tom', 'age': 20}, {'name': 'Lucy', 'age': 28}]
往期文章:
- 《Python零基础快乐学习之旅》学习笔记2——认识变量与基本数学运算
- 《Python零基础快乐学习之旅》学习笔记3——Python的基本数据类型
- 《Python零基础快乐学习之旅》学习笔记4——基本输入与输出
- 《Python零基础快乐学习之旅》学习笔记5——程序的流程控制使用if语句
- 《Python零基础快乐学习之旅》学习笔记6——列表(list)
- 《Python零基础快乐学习之旅》学习笔记7——循环设计
- 《Python零基础快乐学习之旅》学习笔记8——元组(tuple)
- 《Python零基础快乐学习之旅》学习笔记9——字典(dict)
- 《Python零基础快乐学习之旅》学习笔记10——集合(set)
最后
以上就是冷静皮带为你收集整理的《Python零基础快乐学习之旅》学习笔记11——函数设计第11章 函数设计的全部内容,希望文章能够帮你解决《Python零基础快乐学习之旅》学习笔记11——函数设计第11章 函数设计所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复