函数定义
#函数---抽取出相同的重复的代码,提高代码的复用性
#定义函数
'''
格式:
def 函数名([参数,参数...]):
函数体(重复的代码)
注意:1.必须使用关键字def
2.函数体注意缩进
3.
'''
#定义函数:随机数的产生
import random
list1=[]
def generate_random():
for i in range(10):
ran=random.randint(1, 20)
list1.append(ran)
print(list1)
print(generate_random)#输出函数所在地址<function generate_random at 0x000001B6963C2E18>
#调用函数,上面只找到这个函数的地址,这里找到地址后还需要找到地址里的内容
generate_random()#[3, 16, 6, 12, 12, 11, 2, 7, 20, 1]
generate_random()#[3, 16, 6, 12, 12, 11, 2, 7, 20, 1, 9, 4,
带参函数
#带参数函数
'''
格式:
def 函数名(参数1,参数2...):
函数体
'''
#求随机数的函数,具体产生多少个由参数决定
import random
def generate_random(n):
for i in range(n):
ran = random.randint(1,20)
print(ran)
generate_random(5)
#求加法的函数
def add(a,b):
result=a+b
print("和是",result)
add(4,8)
#找出列表最大值函数
def mymax(xulie):
temp=xulie[0]
for i in xulie:
if i>temp:
temp=i
print("最大值是",temp)
list1=[1,2,44,23,99]
mymax(list1)
tuple1=(1,2,44,99,23)
mymax(tuple1)
可变参数
#判断是不是什么类型:isinstance(变量,类型关键字)
print(isinstance(2,int))#True
tuple1=(3,5,2)
print(isinstance(tuple1,tuple))#True
#可变参数---参数的个数不确定
#定义
def add(*a):
print(a)
add()#()
add(1)#(1,)
add(1,4)#(1, 4)
def add2(*agrs):#args表示一个元组--可迭代序列
sum=0
if len(agrs)>0:
for i in agrs:
sum+=i
print('累加和为',sum)
else:
print('没有元素可以计算')
add2(3,5,7)
add2(1,2)
'''
既有可变参数,又有固定参数,需要把固定参数放在前面,可变参数放到最后,
下面例子会报错
def add3(*agrs,name):
print(agrs)
print(name)
add3(1,2,3,'hs')
'''
def add3(name,*args):
print(args)
print(name)
add3('hs',1,2,3)
#(1, 2, 3)
#hs
add3('hs')
# ()
# hs
关键字参数(必须以键值对赋值,默认/**)
#可变参数+关键字参数
#默认值+关键字参数:key=value
def add(a,b=10):
result=a+b
print(result)
#调用
add(5)
add(4,7)#a=4,b=7
def add1(a,b=10,c=4):
result=a+b+c
print(result)
add1(1)#a=1,b=10,c=4
add1(1,5)#a=1,b=5,c=4
add1(2,c=6)#a=2,b=10,c=6
add1(a=2,c=6)#a=2,b=10,c=6
def func(**kwargs):#一个*代表是可变参数,两个代表关键字参数
print(kwargs)#{'a': 1, 'b': 2, 'c': 3}
# func(1,2,3) 两个星号不能这样赋值,这样代表的是可变参数
func(a=1,b=2,c=3)#关键字参数,必须成对给值
dict1={'001':'python','002':'java','003':'c语言'}
# func(dict1)报错
func(**dict1)#**dict1会先将dict1进行拆包成关键字形式 func(001=python,002=java。。。)
def bb(a,b,*c,**d):
print(a,b,c,d)
bb(1,2) # 1 2 () {}
bb(1,2,3,4) # 1 2 (3,4) {}
#出现键值对就是给**赋值
bb(1,2,x=100,y=200)# 1 2 () {'x':100,'y':200}
bb(1,2,3,x=100)# 1 2 (3,) {'x':100}
#计算每位同学年龄
students={'001':('蔡徐坤',20),'002':('王源',19),'003':('王俊凯',21)}
def print_boy(persons):
if isinstance(persons,dict):
print(persons.values())#dict_values([('蔡徐坤', 20), ('王源', 19), ('王俊凯', 21)])
for name,age in persons.values():#元组可以拆包
print('{}的年龄是{}'.format(name,age))
print_boy(students)
def print_boy(name,**persons):
print('{}喜欢的小鲜肉是'.format(name))
if isinstance(persons,dict):
print(persons.values())#dict_values([('蔡徐坤', 20), ('王源', 19), ('王俊凯', 21)])
for name,age in persons.values():#元组可以拆包
print('{}的年龄是{}'.format(name,age))
print_boy('hhh',**students)
综合运用
def func(a,b=10,c=3,**kwargs):
print(a,b,c,kwargs)
func(1)#1 10 3 {}
func(2,5,c=8)#2 5 8 {}
func(2,b=7,d=5,f=6)#2 7 3 {'d': 5, 'f': 6}
def func2(a,*args,**kwargs):
print(a,args,kwargs)
t=(1,2,3,4)
func2(1,t)#1 ((1, 2, 3, 4),) {}
l=[2,5,8]
func2(1,l,c=9,b=6)#1 ([2, 5, 8],) {'c': 9, 'b': 6}
dict1={'1':'a','2':'b'}
#列表拆用一个*,字典用**
func2(1,*l,**dict1)#1 (2, 5, 8) {'1': 'a', '2': 'b'}
'''
学过几门课
'''
def func1(name,*args):
if len(args)>0:
for i in args:#('html','mysql')
print('{}学过{}'.format(name,i))
else:
print('没有学过任何课程')
course=['html','mysql']
func1('lili',*course)
总结
带返回值的函数
#返回值:将函数中运算的结果通过 return关键字 ‘扔’ 出来
#如果直接在函数内打印,而不是返回值,那么仅仅限于打印在终端,辅助查看,但是外部是无法使用的
def add(a,b):
return a+b
print(add(3,4))#7
result=add(5,8)
print(result)#13
#return后面可以返回多个参数
def test():
return 'hello',100
x=test()
print(x)#('hello', 100)元组
x,y=test()
print(x,y)#hello 100
例子
'''
加入购物车
判断用户是否登录,如果登录,成功加入购物车,否则提示请登录之后添加
成功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('牛奶')
函数嵌套调用
#函数嵌套调用
def a():
print('a')
def b():
a()
print('b')
b()
#a
#b
islogin = False#判断用户是否登录的变量 默认是没有登录
def add_shoppingcart(goodsName):
global islogin#不加这个的话,函数内部不可以改变外部的变量
if islogin:
if goodsName:
print('成功将{}加入购物车'.format(goodsName))
else:
print('没有选择任何商品')
else:
print('用户没有登录')
answer=input('是否进行登录?Y/N')
if answer=='Y':
username = input('输入用户名')
password = input('输入密码')
islogin=login(username, password)
else:
pass
def login(username,password):
if username=='lijiaqi' and password=='123456':
print('登录成功')
return True
else:
print('用户名或密码有误')
return False
print('准备添加购物车')
add_shoppingcart('牛奶')