python基础(四) P91-P119

学习视频地址:https://www.bilibili.com/video/BV15J411T7WQ?p=91

P91 函数

在这里插入图片描述
调用函数直接输入函数名就行

P94-97 : 参数

无参数函数:
def func () :
pass
func()    ------>  调用
有参数函数:
   1. 普通参数
	     def func(name,age):
			pass
  		 func 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,6,7,9]
    	 dict1 = ['1','a','2','b']
   		 func(*list1)
    	 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

例:

 def func(a, *args):
    print(a, args)
func(2, 3, 4, 5)
func(2, [1, 2, 3, 4])
func(2, 3, [1, 2, 3, 4, 5])
func(5, 6, [4, 5, 6], 9)
结果:
2 (3, 4, 5)
2 ([1, 2, 3, 4],)
2 (3, [1, 2, 3, 4, 5])
5 (6, [4, 5, 6], 9)

def func1(a, b=10, c=3, **kwargs):
    print(a, b, c, kwargs)
func1(1)
func1(2, b=10)
func1(3, 5, 7, x=1, y=2)
结果:
1 10 3 {}
2 10 3 {}
3 5 7 {'x': 1, 'y': 2}

def func2(a, *args, **kwargs):
    print(a, args, kwargs)
t = (1, 2, 3, 4)
func2(1, t)
l = [2, 5, 8]
func2(1, l, c=9, b=6)
dict1 = {'1': 'a', '2': 'b', '3': 'c'}
func2(1, *l, **dict1)
结果:
1 ((1, 2, 3, 4),) {}
1 ([2, 5, 8],) {'c': 9, 'b': 6}
1 (2, 5, 8) {'1': 'a', '2': 'b', '3': 'c'}

函数中能调用函数
例:购物车案例

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('请输入用户名:')
            passward = input('请输入密码:')
            islogin = login(username, password)  # 函数中能掉函数
            add_shoppingcart('迪奥999')

        else:
            print('不能添加此商品')


def login(username, password):
    if username == 'nannan' and password == '123456':

        return True
    else:

        return False


username = input('请输入用户名:')
password = input('请输入密码:')

islogin = login(username, password)

add_shoppingcart('迪奥999')

函数嵌套
例:验证码登陆

import random


def generate_checkcode(n):
    s = '0123456789qwertyuioplkjhggfdsazxcvbnm'
    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 == 'nannan' and password == '123456' :
            print('用户登陆成功')
        else:
            print('用户名密码错误')
    else:
        print('输入的验证码错误')
login ()

P101-P102 全局变量和局部变量

全局变量如果是不可变在函数中进行修改需要添加global关键字,
如果全局变量是可变的,在函数中修改的时候就不需要添加gobal
在这里插入图片描述

P104 - 105 内部函数

1.可以访问外部函数的变量
2.内部函数可以修改外部函数的可变类型的变量比如:list1
3.内部函数修改全局的不可变量时,需要在内部函数声明global 变量名
内部函数修改外部函数的不可变的变量时,需要在内部函数中声明:nonlocal 变量名
4.locals() 查看本地变量有哪些,以字典的形式输出
globals() 查看全局变量有哪些,以字典的形式输出(注意里面会有一些系统的键值对)
例:

a = 100
def func():
    b = 99
    def inner_func():
        global a
        nonlocal b
        c = 88
        # 尝试修改
        c += 12
        b += 1
        a += 10
        # 尝试打印
        print(a, b, c)
    inner_func()
func()

P106-109 闭包

闭包多用于函数。
条件:
1.外部函数中定义了内部函数
2.外部函数是有返回值
3.返回的值是:内部函数名
4.内部函数引用了外部函数的变量
格式:
def 外部函数():

def 内部函数():

retunrn 内部函数

例:

# 闭包
def func(a, b):
    c = 10

    def inner_func():
        s = a + b + c
        print('相加之后的结果是:', s)
    return inner_func


# 调用func
ifunc = func(6, 9)   # ifunc 就是 inner_func  ifunc = inner_func
# 调用返出来的
ifunc()
结果:
相加之后的结果是: 25
闭包计数器
# 计数器
def generate_count():
    container = [0]

    def add_one():
        container[0] = container[0] + 1
        print('当前是第{}次访问'.format(container[0]))

    return add_one
counter = generate_count()

counter()
counter()
counter()
结果:
当前是第1次访问
当前是第2次访问
当前是第3次访问

闭包能保持参数

在这里插入图片描述
在这里插入图片描述

P110 装饰器

特点:
1.函数A是作为参数出现的(函数B就接受函数A作为参数)
2.要有闭包的特点
定义一个装饰器:
在这里插入图片描述
在这里插入图片描述
万能的装饰器:

def decorate (func):
    def wrapper(*args,**kwargs):
        pass
    return wrapper
    
@decorate        

多层装饰器:
在这里插入图片描述
带参数的装饰器:
1.带参数的装饰器是三层的
2.最外层的函数负责接收装饰器的参数
3.里面的内容还是和原装饰器的内容
例:
在这里插入图片描述
装饰器应用实例:

import time

islogin = False


def login():
    username = input('请输入用户名:')
    password = input('请输入密码:')
    if username == 'nannan' and password == '123':
        return True
    else:
        return False


def login_requir(func):
    def wrapper(*args, **kwargs):
        global islogin
        if islogin:
            func(*args, **kwargs)

        else:
            print('没有登陆')
            islogin = login()
            print('登陆结果:', islogin)
    return wrapper


@login_requir
def pay(money):
    print('正在支付{}元'.format(money))
    print('..........')
    time.sleep(2)
    print('支付成功!')




pay(10000)
pay(8000)

P115函数作用域:LEGB

L : local 本地 局部变量
E:encloseing 嵌套
G:global 全局
B:built-in 内置的

P116 匿名函数: 简化函数定义

格式: lambda 参数1,参数2,:运算
def add(a,b) :
s = a + b
return s
s = lambda a, b : a+b
匿名函数作为参数
在这里插入图片描述
在这里插入图片描述
结果:[4 , 4 , 6 , 8 , 8 , 10 , 10 , 0 , 2 , 6 ]

P117 内置函数; filter sorted reduce

在这里插入图片描述
注:函数中带key 的使用
在这里插入图片描述

P119 递归函数:自己调用自己

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值