python中函数参数的介绍和集合(set)的介绍
一、函数的介绍
- 函数介绍:
- 函数是组织好的,可重复使用的,用来实现单一的,或相关联功能的代码段。
- 函数作用:
- 提高应用的模块性与代码的复用性。
- 例如
- len()函数
- print()函数
- input()函数等等
二、自定义函数
1、自定义函数的规则
- 定义规则:
- 函数代码块以def关键词开头,后接函数标识符名称和圆括号()
- 圆括号中间可以放入参数
- 函数内容以冒号起始,并且缩进。
def function_name(param):
print('func code')
- 注意:
- 函数只有在调用的时候才会执行,通过function_name(param)进行调用。
2、练习
- 用函数打印九九乘法表
# 用函数打印九九乘法表
def multi_table():
for i in range(1, 10):
for j in range(1, i + 1):
print(f'{j}*{i}={j * i}', end='\t')
print(end='\n')
multi_table() # 函数只有在调用的情况下才执行
三、函数的参数
1、形参与实参
- 形参:就是函数定义中的参数,没有实际的值,通过别人赋值后才有意义,相当于变量。
- 实参:就是条用函数时传入的参数,时一个实际存在的参数。
def function_name(param): # param为形参
print('func code')
function_name(param) # param为实参
# 形参与实参
def test_one(b): # b为形参
pass
a = 1
test_one(a) # a 为实参
# 整个过程,相当于:a=1 b=a
2、可变类型参数与不可变类型参数
- 不可变类型参数:在函数体内对变量重新赋值,相当于重新开辟了愉快内存来保存值
- 可变类型参数:在函数体内可以改变原有的值
# 可变类型参数与不可变类型参数
def test_one(a):
# 整体为不可变对象
a = 10
print('inner', a) # 10
a = 1
test_one(a)
print('outer', a) # 1
def test_two(li):
# 列表为可变数据类型
li.extend([5, 6])
print('inner', li) # inner [1, 2, 3, 4, 5, 6]
li = [1, 2, 3, 4]
test_two(li)
print('outer', li) # outer [1, 2, 3, 4, 5, 6]
3、位置参数
- 位置参数:也就是实参与形参顺序一一对应,而不论变量名。
# 位置参数
def sum_nums(num1, num2):
res = num1 + num2
print(f'num1:{num1}')
print(f'num2:{num2}')
print(f'{num1}+{num2}={res}')
num1 = int(input('请输入num1'))
num2 = int(input('请输入num2'))
sum_nums(num1, num2)
'''打印结果:
请输入num110
请输入num220
num1:10
num2:20
10+20=30
'''
- 改变实参中num1和num2的位置,结果如下:
def sum_nums(num1, num2):
res = num1 + num2
print(f'num1:{num1}')
print(f'num2:{num2}')
print(f'{num1}+{num2}={res}')
num1 = int(input('请输入num1'))
num2 = int(input('请输入num2'))
sum_nums(num2, num1)
'''打印结果:
请输入num110
请输入num220
num1:20
num2:10
20+10=30
'''
- 结论:实参与形参的顺序一一对应。不论变量名。
4、关键字参数
- 以形参=实参形式指定,不论参数位置。
# 关键字参数
def sum_nums(num1, num2):
res = num1 + num2
print(f'num1:{num1}')
print(f'num2:{num2}')
print(f'{num1}+{num2}={res}')
num1 = int(input('请输入num1'))
num2 = int(input('请输入num2'))
sum_nums(num1=num1, num2=num2) # 无论顺序如何,结果都一样
5、默认值参数
- 默认值参数:形参chu进行赋值,所以当调用时不传该参数就默认使用形参处的值。当调用时传了该参数,则覆盖掉默认参数。
# 默认值参数
# 当实参不传时,就默认为形参中的值
def test_one(a, b=2):
a = a + b
print(a,b)
a = 1
test_one(a) # 打印结果为3 2
# 当实参中传了,会覆盖掉形参中存在的值
def test_one(a, b=2):
a = a + b
print(a,b)
a = 1
test_one(a, 10) # 打印结果为11 10
6、可变长度参数
- *args接收时会转为元组数据类型
- **kwargs接收时会转为字典数据类型
# 可变长度参数
def test_one(*args): # *args为一个可变长度参数,会打包成元组
print(args)
test_one() # () args返回的时一个空元组,
test_one(1, 2, 3) # (1, 2, 3)
def test_one(**kwargs): # **kwargs为一个可变长度参数,会打包成字典
print(kwargs)
test_one() # () kwargs返回的时一个空字典,
test_one(a=1, b=2, c=3) # {'a': 1, 'b': 2, 'c': 3}
四、集合(set)的介绍
1、集合的定义
集合(set)是一个无序的不重复元素的集,基本功能包括关系测试和消除重复元素。是可变的数据类型。
集合数据类型的核心在于自动去重。
2、集合(set)的创建
集合使用大括号{}框定元素,并以逗号进行分隔。
s = {} # 直接用{}括号创建的是字典
print(type(s)) # <class 'dict'>
s1 = set()
print(s1) # set()
print(type(s1)) # <class 'set'>
s2 = set([1, 2, 3, 1, 2, 3, 4, 5, 6, 6, 5])
print(s2) # {1, 2, 3, 4, 5, 6} 自动去重
s3 = set('hello world')
print(s3) # {'w', 'h', 'r', 'e', 'd', 'o', 'l', ' '} 自动去重,且无序
3、集合(set)添加元素
通过set.add(key)方法可以添加元素到set中
s1 = set([1, 2, 2, 3, 3, 4, 5, 6])
s1.add(7)
print(s1) # {1, 2, 3, 4, 5, 6, 7}
s1.add('Tom')
print(s1) # {1, 2, 3, 4, 5, 6, 7, 'Tom'} 添加的元素可以是任意类型
s1.add([1, 2, 3])
print(s1) # TypeError: unhashable type: 'list'同字典一样,只能添加不可变对象
4、集合(set)更新
可以使用set.update()方法,将另一个对象更新到已有的集合中,这一过程同样会进行去重。
s = set([1, 3, 2, 4, 5, 6, 5])
s.update('hello world') # 将helloworld每个拆开添加到s中,任然去重。
print(s) # {1, 2, 3, 4, 5, 6, 'l', 'o', 'e', ' ', 'w', 'h', 'd', 'r'}
5、集合(set)删除元素
set.remove(key):删除指定元素
set.pop():随机删除元素()中无参数
s = {1, 2, 3, 4}
# print(s[0]) # 没有下标概念,会报错 TypeError: 'set' object does not support indexing
s.remove(4)
print(s) # {1, 2, 3}
# s.remove(5)
# print(s) # 元素不存在时,会报错 KeyError: 5
s1 = set([1, 2, 3, 4, 5, 6, 7, 8, 9, 7, 10])
s1.pop() # 随机删除
print(s1) # {2, 3, 4, 5, 6, 7, 8, 9, 10}
注意:
集合不能取出元素,因为集合是无序的,没有不支持索引,也不支持字典那样读取键值对。
五、作业
1、 打印名片程序:输入姓名,电话号码,性别,最后打印出来名片
- 控制姓名长度为6-20
- 电话号码长度11
- 性别只能允许输入男或女
- 每一样信息不允许为空
while True:
name = input('请输入姓名:')
if len(name) < 6 or len(name) > 20:
print('输入错误,姓名长度为6-20位,请重新输入')
else:
break
while True:
tel = input('请输入电话:')
if tel.isdigit() != True or len(tel) != 11:
print('输入错误,电话为11位纯数字,请重新输入')
else:
break
while True:
sex = input('请输入性别:')
if sex not in ['男', '女']:
print('输入错误,性别为男或女,请重新输入')
else:
break
def card(a, b, c):
print(f'名片\n姓名:{a}\n电话:{b}\n性别:{c}')
card(name, tel, sex)
2、使用函数求前20个斐波那契数列斐波那契数列:1,1,2,3,5,8,13,21…即: 起始两项均为1,此后的项分别为前两项之和
def fun_sum(a, b):
return a + b
li_num = [1, 1]
for i in range(1, 19):
li_num.append(fun_sum(li_num[i - 1], li_num[i]))
print(li_num)
3、编写一段代码,定义一个函数求1-100之间所有整数的和,并调用该函数打印出结果
def num_sum():
res = 0
for i in range(1, 101):
res = res + i
print(res)
num_sum()