集合:
list tuple ---》set()
无序不重复的序列,集合
无序 ---》 跟下标相关
s ={1,2,3,4,5} ---->s[1]
for i in s:
print(i)
内置函数:
添加: add update
删除: remove discard pop clear
运算相关函数:
- difference()
| union()
& intersection()
^ symmetric_difference()
可变和不可变:
可变: 地址不变里面内容改变 list dict set
不可变: 只要内容改变,必须改变地址 int str float tuple frozenset
类型转换:
str ---> list set ... 相互的转换
list ---> set tuple dict 相互的转换
函数:
增加代码的复用性,减少了代码冗余
def 函数名([参数,...]):
函数体(重复性代码)
没有参数:
def add():
result = 1+3
print(result)
调用:
add() ---> 4
有参数:
def add(a,b):
result = a+b
print(result)
调用:
add(1,3)
add(5,6)
add(100,29)
总结:
1.参数的种类:
2.返回值return
3.函数间相互调用
4.局部和全局变量
可变参数
# 有参数的函数:
# 可变参数
# def add(a, b):
# pass
# add(1,3)
# 定义方式:
# def add(*args): # arguments 参数
# # print(args)
# sum = 0
# if len(args) > 0:
# for i in args:
# sum += i
# print('累加和是:sum:', sum)
# else:
# print('没有元素可计算,sum:', sum)
#
#
# add() # ()空元组
# add(1) # (1,)
# add(1, 2) # (1,2)
# add(1, 2, 3, 4) # (1,2,3,4)
# xxx 计算出来的累加和是:xxx
def add(name, age, *args): # name, *args ='飞飞', 4, 6, 8
# print(args, name)
sum = 0
if len(args) > 0:
for i in args:
sum += i
print('%s累加和是:sum:%s' % (name, sum))
else:
print('没有元素可计算,sum:', sum)
# 调用
add('飞飞', 4, 6, 8)
add('阿文', 10) # name,age, *args='阿文',10 #没有元素可计算,sum: 0
add('学强', 9) #没有元素可计算,sum: 0
# a,*b =1,3,5,6,7
# 注意: 可变参数必须放在后面: name,*args
可变参数+关键字参数
# 可变参数 + 关键字参数
# 关键字参数:key=value
def add(a, b=10): # 关键字参数 此时的b就是默认值
result = a + b
print(result)
# 调用
add(5)
add(4, 7) # a=4,b=7 # 此时7就会覆盖b原来的默认值
def add1(a, b=10, c=4):
print(a, b, c)
result = a + b + c
print(result)
add1(1)
add1(1, 5) # 是给b赋值成功
# 给c赋值而不是给b赋值
add1(2, 6) # 默认6是赋值给b了,
add1(2, c=6) # 如果想将6赋值给c,则需要结合关键字的key使用
# 函数: 打印每位同学姓名和年龄
students = {'001': ('蔡徐坤', 21), '002': ('王源', 19), '003': ('王俊凯', 20), '004': ('易烊千玺', 19)}
def print_boy(name, **persons): # persons = students
print('{}喜欢的小鲜肉是:'.format(name))
if isinstance(persons, dict):
values = persons.values()
# print(values)
for name, age in values:
print('{}的年龄是:{}'.format(name, age))
# 调用
print_boy('蕊蕊', **students)
# def func(**kwargs): # key word argument
# print(kwargs)
# 调用
# func(a=1, b=2, c=3) # 关键字参数
# func() # {}
# func(a=1) # {'a':1}
# func(a=1, b=2) # {'a': 1, 'b': 2}
# dict1 = {'001': 'python', '002': 'java', '003': 'c语言', '004': 'go语言'}
# func(**dict1)
'''
步骤:
1.将字典进行拆包。‘001’=‘python’,‘002’=‘java’.......
2.func里面的参数都是关键字
3.将关键字参数在进行一次装包动作
4.装包成功:kwargs,就是装包成功的字典
'''
'''
使用函数的时候:
def aa(**kwargs):
pass
aa(a=1, b='hello', c='tom') --->将关键字装包成字典
'''
def aa(**kwargs):
print(kwargs)
aa(a=1, b='hello', c='tom') # 装包:{'a': 1, 'b': 'hello', 'c': 'tom'}
# 如果在开发的时候,已知一个字典
dict1 = {'a': 1, 'b': 'hello', 'c': 'tom'}
aa(**dict1) # a=1, b='hello', c='tom'
#拆包的过程
#{'a': 1, 'b': 'hello', 'c': 'tom'}
def bb(a, b, *c, **d):
print(a, b, c, d)
bb(1, 2) # 1 2 () {} 后面2个 可有可无
bb(1, 2, 3, 4) # 1 2 (3,4) {} 没有关键字所以无{}
bb(1, 2, x=100, y=200) # 1 2 () {'x':100,'y':200} #有关键字出现 *c可有可无
bb(1, 2, 3, x=100) # 1 2 (3,) {'x':100}
bb(1, 2, x=100, y=200, z=100) #1 2 () {'x': 100, 'y': 200, 'z': 100}
Example&案例
'''
练习:
1.
def func(a,*args):
print(a,args)
调用:
func(2,3,4,5) 2 (3,4,5)
func(2,[1,2,3,4]) 2 ([1,2,3,4],)
func(2,3,[1,2,3,4,5]) 2 (3,[1,2,3,4])
func(5,6,(4,5,7),9) 5 (6, (4, 5, 7), 9)
2.
def func(a,b=10,c=3,**kwargs): 关键字默认值
print(a,b,c,kwargs)
func(1) 1 10 3 {}
func(2,b=10) 2 10 3 {}
func(3,5,7,a=1,b=2) 报错 这里起的名字和函数参数一样 不能重复变量
func(3, c=5, b=7, x=1, y=2) # 3 5 7 {'x': 1, 'y': 2}
3.
def func(a,*args,**kwargs):
print(a,args,kwargs)
t=(1,2,3,4)
func(1,t) #1 ((1, 2, 3, 4),) {}
l=[2,5,8]
#func(1,l,a=9,b=6) #报错 和上面函数a 重复
func(1,l,c=9,d=6) #1 ([2, 5, 8],) {'c': 9, 'd': 6}
'''
# def func(a, *args):
# print(a, args)
#
#
# func(2, [1, 2, 3, 4],5,'hello')
# func(5,6,(4,5,7),9)
# def func(a, b=10, c=3, **kwargs):
# print(a, b, c, kwargs)
# func(1) # 1 10 3 {}
# func(2, b=11) # 2 11 3 {}
# func(3, c=5, b=7, x=1, y=2) # 3 5 7 {'x': 1, 'y': 2}
def func(a, *args, **kwargs):
print(a, args, kwargs)
t = (1, 2, 3, 4)
func(1, t) # 1 ((1,2,3,4),)
l = [2, 5, 8]
func(1, l, c=9, b=6) # 1 ([2, 5, 8],) {'c': 9, 'b': 6}
dict1 = {'1': 'a', '2': 'b', '3': 'c'}
func(1, *l, **dict1)
#这里加个*, 表示把上面的列表给拆了
# func(1,2,5,8,1='a',2='b',3='c')
'''
courses = ['html','mysql','python']
'''
#案例
def technology(name,*args):
if len(args) >0 :
for i in args:
print('{}学过了{}'.format(name,i))
else:
print('没有学过任何编程技术')
courses = ['html','PHP','GO','C++']
technology('夏恺晟',courses) #夏恺晟学过了['html', 'PHP', 'GO', 'C++']
technology('夏恺晟',*courses) ## 拆包
# 夏恺晟学过了html
# 夏恺晟学过了PHP
# 夏恺晟学过了GO
# 夏恺晟学过了C++
无参函数&有参函数 总结
'''
无参数函数:
def func():
pass
func() ---->调用
有参数函数:
1. 普通参数
def func(name,age):
pass
func('aa',18) ----> 形参与实参的个数要一致
2. 可变参数:
A. def func(*args):
pass
func() ----> 函数调用时,实参的个数可以没有,也可以多个 *不能是关键字参数
func(4) func(5,'h')
B. def func(**kwargs):
pass
func(a=1,b=2) ----> 函数调用时,实参的个数可以没有,也可以多个 **必须是关键字参数
C. def func(*args,**kwargs):
pass
list1 = [1,3]
dict1 = {'1':'a','2':'b'}
func(*list1,**dict1) # func(1,3,'1'='a','2'='b')
D. 混用
def func(name,*args,**kwargs):
pass
func('tom') ----> 必须赋值
3. 默认值+关键字
def func(name,age=18):
pass
func('tom') ----》 tom 18
func('tom',age=20) --->关键字赋值
'''
返回值
# 返回值:将函数中运算的结果通过 return 关键字 ‘扔’出来
def add(a, b):
result = a + b
print(result)
return 'hello', result
# 调用函数
x, y = add(2, 6)
print(x, y) #
#8
#hello 8
'''
return 返回值
1. return后面可以是一个参数 接收的时候x=add(1,2)
2. return 后面也可以是多个参数, 如果是多个参数则底层会将多个参数先放在一个元组中,
将元组作为整体返回 x= add(1,2) x ---> (1,2,3)
3. 接收的时候也可以是多个: return 'hello','world' x,y = ('hello','world') ---> x='hello' y='world'
'''
返回值-案例-加入购物车
'''
加入购物车
判断用户是否登录,如果登录,成功加入购物车,否则提示请登录之后添
成功 True 不成功 False
def add_shoppingcart(goodsName):
pass
def login(username,password):
pass
调用
'''
islogin = False # 用于判断用户是否登录变量 默认是没有登录的
def add_shoppingcart(goodsName):
if islogin and goodsName:
# 登录的
print('成功将{}加入到购物车中!'.format(goodsName))
else:
# 没有登录
print('用户没有登录或者没有添加任何商品!')
def login(username, password):
if username == 'lijiaqi' and password == '123456':
# 登录成功
# print('登录成功')
return True
else:
# print('用户名或者密码有误')
return False
# 调用函数: 添加商品到购物车中
username = input('输入用户名:')
password = input('输入密码:')
islogin = login(username, password)
add_shoppingcart('阿玛尼唇釉')
函数嵌套
'''
加入购物车
判断用户是否登录,如果登录,成功加入购物车,否则提示请登录之后添
成功 True 不成功 False
def add_shoppingcart(goodsName):
pass
def login(username,password):
pass
调用
'''
islogin = False # 用于判断用户是否登录变量 默认是没有登录的
def add_shoppingcart(goodsName):
global islogin
if islogin:
if goodsName:
# 登录的
print('成功将{}加入到购物车中!'.format(goodsName))
else:
print('没有选中任何商品!')
else:
# 没有登录
answer = input('用户没有登录!是否登录用户?(yes/no)')
if answer == 'yes':
# 登录
username = input('输入用户名:')
password = input('输入密码:')
# 调用login
islogin = login(username, pa ssword) # 在一个函数中可以调用另一个函数
print('islogin:',islogin)
else:
print('很遗憾!不能添加任何商品!')
def login(username, password):
if username == 'lijiaqi' and password == '123456':
# 登录成功
# print('登录成功')
return True
else:
# print('用户名或者密码有误')
return False
# 调用函数: 添加商品到购物车中
username = input('输入用户名:')
password = input('输入密码:')
islogin = login(username, password)
add_shoppingcart('阿玛尼唇釉')
#=================================================
def a():
print('AAAAAAAAAA')
def b():
# 调用函数a
a()
print('BBBBBBBBBBB')
def c():
b()
print('CCCCCCCCCCC')
# 调用b
# b()
c()
函数综合应用
# 函数综合应用:
'''
用户登录
输入用户名
输入密码
输入验证码 ----》 封装成一个函数
'''
import random
# 定义生成验证码函数
def generate_checkcode(n):
s = '0987654321qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'
code = ''
for i in range(n):
ran = random.randint(0, len(s) - 1)
code += s[ran]
return code
# 定义登录函数
def login():
username = input('输入用户名:')
password = input('输入密码:')
# 得到一个验证码
code = generate_checkcode(5) # 函数之间调用
print('验证码是:', code)
code1 = input('输入验证码:')
# 验证
if code.lower() == code1.lower():
# 验证码输入正确
if username == 'lijiaqi' and password == '123456':
print('用户登录成功')
else:
print('用户名或者密码有误!')
else:
print('验证码输入有误!')
# 调用函数
login()
局部变量和全局变量
# global 变量的范围
# 局部变量 全局变量
# 声明在函数外层是全局的,所有函数都可以访问。
name = '月月'
def func():
# 函数内部声明的变量,局部变量. 局部变量仅限于在函数内部使用
s = 'abcd'
s += 'X'
print(s, name)
# print(s) 报错
def func1():
global name # 不修改全局变量,只是获取打印。 但是如果要发生修改全局变量,则需要在函数内部声明:global 变量名
# print(s)
print(name) # 报错: 函数内部的变量可以随便修改赋值,但是全局的变量就不能随便在函数体中进行修改
name += '会弹吉他'
print('func1修改后的name是:',name)
def func2():
name = '小月月' # 局部变量与全局变量同名
name += '弹吉他的小美女'
print(name)
# global name
# print(name)
# func2()
# func1()
# func()
func2()
'''
函数
文件操作
异常
模块
面向对象
'''
# 全局变量如果是不可变在函数中进行修改需要添加global关键字,
# 如果全局变量是可变的,在函数中修改的时候就不需要添加global
# 局部和全局
# 全局变量如果是不可变在函数中进行修改需要添加global关键字,
# 如果全局变量是可变的,在函数中修改的时候就不需要添加global
name = '月月'
list1 = [1, 2, 4, 6]
def func():
name = '蕊蕊'
print(name)
print(list1)
def func1():
global name
print(name)
name += '真漂亮!'
# 修改列表
list1.append(8)
print(list1)
def func2():
name1 = 'lucy'
name1 += 'hhhh'
print(name1) # 自己的
print(name)
# func1()
#
# func()
func2()