目录
5.可变与不可变的全局变量 与 是否需要加global关键字的问题
1.函数定义、参数:
# 函数可以增强代码的模块化和提高代码的重复利用率
'''
函数定义
1.格式:
def 函数名([参数,参数...])
函数体
2.def不可以省略,函数名()绑定的
3.函数体部分注意缩进
4.函数名命名:字母,数字,下划线
'''
# 产生10个随机数
import random
# 无参
def generate_random():
for i in range(10):
ran=random.randint(1,20)
print(ran)
# 调用函数
generate_random()
# 运行:
# 右键-run
# 右上角三角符号
# 有参
def generate_random(num):
for i in range(num):
ran=random.randint(1,20)
print(ran)
generate_random(20)
# 判断是否登录成功
def login(uname,pwd):
username='admin'
passwd='123'
for i in range(3):
if uname==username and pwd==passwd:
print('登录成功')
break
else:
print('登录失败')
uname = input('请输入用户名:')
pwd = input('请输入密码:')
uname = input('请输入用户名:')
pwd = input('请输入密码:')
login(uname,pwd)
# 求最大值
def maxvalue(a):
max=a[0]
for i in range(len(a)-1):
if max<a[i+1]:
max=a[i+1]
print(max)
maxvalue([1,3,5,6,2])
def maxvalue(a):
max=a[0]
for i in a:
if max<i:
max=i
print(max)
maxvalue([1,3,5,6,2])
maxvalue((1,3,5,6,2))
# 排序
def sort(nums):
# 判断类型
if isinstance(nums,tuple):
print('不能排序')
else:
for i in range(len(nums) - 1):
for j in range(0, len(nums) - 1 - i):
if nums[j] > nums[j + 1]:
nums[j], nums[j + 1] = nums[j + 1], nums[j]
print(nums)
sort([3,1,5,7,2])
# 可变参数
def add(*args):
print(args)
add()
add(2)
add(2, 3, 4, 5)
# 结果:
# ()
# (2,)
# (2, 3, 4, 5)
def add(*args):
sum=0
if len(args)>0:
for i in args:
sum+=i
print(sum)
else:
print('无元素可计算')
add()
add(2)
add(2, 3, 4, 5)
# 无元素可计算
# 2
# 14
# 可变+不可变参数(固定参数1,固定参数2,可变参数)
def add(name,*args):
sum=0
if len(args)>0:
for i in args:
sum+=i
print(name,sum)
else:
print('无元素可计算')
add('张一山',2, 3, 4, 5)
# 张一山 14
print('*'*50)
# 可变参数+关键字参数
# 关键字参数:参数形式为key=value
def add(a, b=10):
res = a+b
print(res)
add(3)
add(3, 5)
# 13
# 8
def add(a,b=10,c=5):
res = a+b+c
print(res)
add(3)
add(3, 5)
add(3, 5, 1)
# 18
# 13
# 9
add(3, c=5)
# 18
# kwargs:key word args
# 关键字参数:调用的时候赋值必须key=value的形式
def fun(**kwargs): # 装包
print(kwargs)
# 调用:直接传关键字
# 将关键字装包
fun(a=1,b=2,c=3) # 转成字典形式保存
# {'a': 1, 'b': 2, 'c': 3}
# 调用:已知有一个字典的时候
# 先拆包,后装包
lans={'1':'python','2':'java','3':'go'}
fun(**lans) # 此处拆包:'1'python,'2'='java','3'='go'
# 结果:{'1': 'python', '2': 'java', '3': 'go'}
# ps:
# 传递实参是时候用到**变量名时候,
# 会将字典进行拆成关键字参数的形式
# 固定+可变+关键字参数
def bb(a,b,*c,**d):
print(a,b,c,d)
bb(1,2) # 1 2 () {}
bb(1,2,3,4,5) # 1 2 (3, 4, 5) {}
bb(1,2,x=111,y=222) # 1 2 () {'x': 111, 'y': 222}
bb(1,2,3,x=100) # 1 2 (3,) {'x': 100}
# 练习
# test1:
def test1(a,*args):
print(a,args)
test1(1,[12,3,4])
test1(1,2,3,[33,22,11])
test1(1,3,(3,2))
test1(1,2,(3,2),6)
# 结果:
# 1 ([12, 3, 4],)
# 1 (2, 3, [33, 22, 11])
# 1 (3, (3, 2))
# 1 (2, (3, 2), 6)
# test2:
def test2(a,b=1,c=2,**kwargs):
print(a,b,c,kwargs)
test2(1)
test2(1,b=2)
test2(1,2,3,x='python')
# 1 1 2 {}
# 1 2 2 {}
# 1 2 3 {'x': 'python'}
# test3
def test3(a,*b,**c):
print(a,b,c)
list1=[1,2,3,4,5]
dict1={'1':'张一山','2':'杨紫','3':'尤浩然'} # key必须加引号
test3(1,list1) # 1 ([1, 2, 3, 4, 5],) {}
test3(1,*list1,**dict1) # 1 (1, 2, 3, 4, 5) {'1': '张一山', '2': '杨紫', '3': '尤浩然'}
'''
有参数函数总结:
1.普通参数
def func(a,b)
pass
2.可变参数
(1)
def func(*args)
pass
func(a,b,c)
func(*[a,b,c])
(2)
def func(**kwargs)
pass
func(a=x,b=y)
func(**{a=x,b=y})
(3)
func(*args,**kwargs)
func(a,b,*args,**kwargs)
3.默认值参数
def func(name,age=10)
pass
'''
2.函数返回值:
# 函数的返回值
# return
# 一个返回值
def func(name,age):
print(name,age)
return 'hh'
# func('mico',12) # mico 12
a=func('mico',12)
print(a) # hh
print('------------')
# 多个返回值
def func(name,age):
return name,age
a,b=func('mico',12) # 要有变量去接收返回值
print(a,b) # mico 12
3.函数嵌套案例:
案例一:
# 案例:函数套用(登录+购物车模块为例)
isLogin = False # 默认是没有登录的
# 登录函数
def login():
name = input('请输入用户名:')
pwd = input('请输入密码:')
if n