定义
def 函数名([参数,......]):
函数体
函数名:建议用下划线分割的方式 get_name() 或者search()
函数体:封装重复内容 要注意缩进
例如封装一个获取四位验证码的函数。
import random
def generate_code():
s = '1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'
code = ''
for i in range(4):
r = random.choice(s)
code += r
print(code)
调用
函数名()
generate_code()
参数
单个参数
def 函数名(参数1):
函数体
参数就是在调用函数时向函数中传值的作用
def generate_code(n):
s = '1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'
code = ''
for i in range(n):
r = random.choice(s)
code += r
print(code)
generate_code(4)
多个参数
def 函数名(参数1,参数2,.....):
函数体
def get_sum(a, b):
if isinstance(a, int) == isinstance(b, int):
print(a + b)
else:
print('类型错误!')
get_sum(1,2)
默认值
在定义函数的时候,有一个或多个参数已经赋值
def 函数名(参数1,参数2,参数3 = 值,参数4 = 值,.....):
函数体
调用特点:调用时有默认值参数可选择传或不传
例如
def borrow_book(book_name, number=1):
print('书名{}借阅{}本'.format(book_name, number))
borrow_book('西游记')
# 输出结果为书名西游记借阅1本
borrow_book('红楼梦',2)
# 输出结果为书名红楼梦借阅2本
注意:在定义函数的时候,普通参数要位于默认值参数的前面。
关键字
再举个例子
def borrow_book(book_name, username, number=1, school='学校图书馆'):
print('{}从{}借走了{}本{}'.format(username, school, number, book_name))
borrow_book('西游记', '我')
# 输出结果我从学校图书馆借走了1本西游记
如果我只想改变school的参数值,如果去做呢?需要在调用方式时使用关键字参数赋值。
borrow_book('西游记', '我',school='大学')
# 输出结果为我从大学借走了1本西游记
注意:默认参数的顺序是固定的,调用时可以使用关键字参数赋值,可以改变顺序。
列表参数
library = ['西游记', '红楼梦', '三国演义', '水浒传']
def add_book(book_name):
library.append(book_name)
print('添加图书成功')
def show_book(books):
for book in books:
print(book)
add_book('测试测试')
# 输出结果 添加图书成功
show_book(library)
# 输出结果 西游记 红楼梦 三国演义 水浒传 测试测试
可变参数
*args
args默认会把接收到数据转换成元组
def get_sum(*args):
print(args) # 输出结果为(1, 3, 4)
sum = 0
for i in args:
sum += i
print(sum)
get_sum(1,3,4)
装包
def 函数 (*args): ----------------------》此时会出现装包操作
pass
函数(1,2,3,4)
def get_sum(*args):
sum = 0
for i in args:
sum += i
print(sum)
get_sum(1, 2, 3, 4, 5, 7)
拆包
list,tuple,set
调用的时候:
函数(*list) | 函数(*tuple) | 函数(*set)
list1 = [20, 30, 50]
def get_sum(*args):
sum = 0
for i in args:
sum += i
print(sum)
get_sum(*list1)
**kwargs
关键字参数,key = value的形式,在函数调用的时候必须传递关键字参数,才可以转换成key:value的形式,装到字典中。
def show_book(**kwargs):
print(kwargs)
show_book()
# 输出结果{}
装包
def show_book(**kwargs):
for k, v in kwargs.items():
print(k, v)
show_book(book_name = '西游记',author = '吴承恩',number = '10')
# 输出结果{'book_name': '西游记', 'author': '吴承恩', 'number': '10'}
拆包
def show_book(**kwargs):
for k, v in kwargs.items():
print(k, v)
book = {'book_name': '西游记', 'author': '吴承恩', 'number': '10'}
show_book(**book)
*args 和 **kwargs同时使用
def show_book(*args, **kwargs):
print(args)
print(kwargs)
book = {'book_name': '西游记', 'author': '吴承恩', 'number': '10'}
show_book('1', '2', '3', **book)
# 输出结果('1', '2', '3') {'book_name': '西游记', 'author': '吴承恩', 'number': '10'}
返回值
可以使用return关键字
def 函数(参数,....):
return xxxx
当函数调用时通过return向外返出值
注意:只要函数有返回值,需要接收
def get_sum(*args):
total = 0
for i in args:
total += i
return total
total = get_sum(1, 2, 3, 4, 5)
print(total)
# 输出结果15
如果使用return返回多个值时,会以元组的方式返回,例如:
def get_maxandmin(numbers):
for i in range(0, len(numbers) - 1):
for j in range(0, len(numbers) - 1 - i):
if numbers[j] > numbers[j + 1]:
numbers[j], numbers[j + 1] = numbers[j + 1], numbers[j]
min = numbers[0]
max = numbers[-1]
return min, max
list = [50, 20, 30, 1, 5, 15, 40]
result = get_maxandmin(list)
a,b = get_maxandmin(list)
print(result)
# 输出结果为(1, 50)
print(a,b)
# 输出结果为1 50