python入门day09函数

函数定义

#函数---抽取出相同的重复的代码,提高代码的复用性
#定义函数
'''
格式:
    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('牛奶')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值