文章目录
0、函数的作用
函数能够提高代码的复用性,让代码更简洁;封装隔离。
1、函数的定义
-
格式
def 函数名([参数]): 函数体
-
函数名
- 规范的变量名
- 见名知意
- 多个名称直接下划线分隔,首字母小写
2、函数的参数
2.1、位置参数和默认值参数
- 位置参数,是必填的,调用函数时不传会报错。
- 默认值参数是非必填的,如果不填,会采用默认值。
"""
注意:
1、位置参数在默认值参数之前
2、默认传参顺序为定义顺序
3、通过关键字可以更改传参顺序
"""
def borrow_book(book_name, username, number=1, school='1111'):
print('进入{}借书系统'.format(school))
print('{}要借阅的书名:《{}》,借阅的数量{}'.format(username, book_name, number))
borrow_book('狂人日记', '小明')
borrow_book('狂人日记', '小明', 2)
borrow_book('狂人日记', '小明', 3, '222')
borrow_book(username='小明', book_name='狂人日记')
2.2、可变参数args和kwargs
- args
- 特点:(1)参数是非必填的;(2)没有限制参数的个数;(3)传过来的参数放到args参数里,不限格式
"""
1、可变参数:
*args: 接收多个位置参数,类型为元组
2、拆包和装包
2.1、装包
函数定义:def 函数名(*args) ---> 此处传参时,装包
函数调用: 函数名(*列表) ---> 此处传参时,拆包
"""
def calc_sum(*args):
sum = 0
for i in args:
sum += i
print(sum)
# 装包
calc_sum(1, 2, 3)
list1 = [1, 2, 3, 4]
# 拆包
calc_sum(*list1)
-
kwargs
-
特点:(1)参数是非必填;(2)没有限制参数个数;(3)所传参数必须是字典格式。
""" 1、可变参数: **args: 接收多个关键字参数,类型为字典 2、拆包和装包 2.1、装包 函数定义:def 函数名(**args) ---> 此处传参时,装包 函数调用: 函数名(**字典) ---> 此处传参时,拆包 """ def show_book(**kwargs): print(kwargs) show_book() show_book(book_name='《西游记》', author='吴承恩') books = {'book_name': '《红楼梦》', 'author': '曹雪芹'} show_book(**books)
2.3、参数顺序
"""
参数顺序:位置参数>*args>默认值参数>**kwargs
系统函数:
def print(self, *args, sep=' ', end='\n', file=None): # known special case of print
def format(self, *args, **kwargs): # known special case of str.format
"""
book = {'book_name': 'Web安全攻防', 'author': 'xlw', 'number': 5}
print(book, 'hello', sep='--')
print('{}{}{}'.format('11', '22', '33'))
print('{name}-{age}-{sex}'.format(name='11', age='22', sex='男'))
# 列表和字符串相互转换
list1 = ['a', 'b', 'c']
result = '-'.join(list1)
print(result)
print(result.split('-'))
3、函数的返回值
关键字:return
return的作用
- 调用完函数后,将结果返回
- 函数里面遇到return就立即结束。
有的函数不只有一个返回值,函数如果返回多个值的话,会把这几个值放到一个元组里。另外,也可以用多个值来接收
"""
关键字:return
"""
def sum(a, b):
return a + b
s = sum(3, 4)
s += 10
print(s)
4、全局变量和局部变量
- 全局变量是公共的变量,都可以用的变量。一般不推荐用全局变量,因为全局变量有以下2个缺点:(1)不安全,因为所有人都可以改;(2)会一直占着内存。
- 函数里面定义的变量都是局部变量,只能在函数里面用,出了函数就不能用了
a = 100
def test01():
a = 10
b = 1
print('a={}, b={}'.format(a, b))
def test02():
print('a={}'.format(a))
def test03():
global a
a = 11
print('a={}'.format(a))
test01()
test02()
test03()
结果是什么呢?
a=10, b=1
a=100
a=11
- 全局变量在函数内部可读,不可写;如果想在函数内部修改全局变量的值,需要事先通过关键字global声明。
5、可变和不可变类型
- 不可变:当改变变量的值时,地址发生了改变
- int str float bool
- 可变:改变变量的值时,地址不会反正改变
- list dict set
a = 1
print(id(a))
a = 2
print(id(a))
list1 = [1, 2, 3]
print(id(list1))
list1.append(4)
print(id(list1))
6、函数注释
- 单行注释: #
- 多行注释: “”" 注释内容 “”"
- “基本注释内容”
- :para 参数注释
- :return 返回值注释
def login(username, pwd):
"""
登录
:param username: 用户名
:param pwd: 密码
:return:
"""
pass