首页 > 其他分享 >day12

day12

时间:2023-12-17 19:48:35浏览次数:34  
标签:index day12 res func time print def

day12

4.函数名的多种用法

函数名其实绑定的也是一块内存地址 只不过该地址里面存放的不是数据值而是一段代码 函数名加括号就会找到该代码并执行
1.可以当做变量名赋值
	def index():pass
 	res = index
 	res()
2.可以当做函数的参数
   def index():
    	print('from index')
   def func(a):
    	print(a)
    	a()
   func(index)
3.可以当做函数的返回值
	 def index():
    	  print('from index')

    def func():
        print('from func')
        return index
    res = func()
    print(res)
    res()
    
    def index():
        print('from index')
    def func():
        print('from func')
        return func

    res = index()
    print(res)
    res()
4.可以当做容器类型(可以存放多个数据的数据类型)的数据
	def register():
    	print('注册功能')


	def login():
    	print('登录功能')


	def withdraw():
    	print('提现功能')


	def transfer():
    	print('转账功能')


	def shopping():
    	print('购物功能')


    # 定义功能编号与功能的对应关系
    func_dict = {
        '1': register,
        '2': login,
        '3': withdraw,
        '4': transfer,
        '5': shopping
    }

    while True:
        print("""
        1.注册功能
        2.登录功能
        3.提现功能
        4.转账功能
        5.购物功能
        """)
        choice = input('>>>:').strip()
        if choice in func_dict:
            func_name = func_dict.get(choice)
            func_name()
        else:
            print('功能编号不存在')
        # if choice == '1':
        #     register()
        # elif choice == '2':
        #     login()
        # elif choice == '3':
        #     withdraw()
        # elif choice == '4':
        #     transfer()
        # elif choice == '5':
        #     shopping()
        # else:
        #     print('去你妹的 终于写完了')

5.闭包函数


6.函数传参的两种方式

# 了解
# 为函数体传值的方式
# 方式一:通过参数的形式为函数体传值
import requests

def get(url):
    response = requests.get(url)
    if response.status_code == 200:
        print(response.text)

get('https://www.baidu.com')

# 方式二:通过闭包的方式为函数体传值
import requests
import time


def outter(url):  # url='https://www.baidu.com'

    # url='https://www.baidu.com'
    def get():
        response = requests.get(url)
        if response.status_code == 200:
            print(response.text)

    return get


# 造专门下百度的
baidu = outter('https://www.baidu.com')
# 造专门下python的
python = outter('https://www.python.org')

baidu()
python()

7.装饰器简介

什么是装饰器?
"""
在不改变被装饰对象原代码和调用方式的情况下给被装饰对象添加新的功能
"""

8.无参装饰器简单实现

# 统计函数运行时间代码
import time
def index():
    start_time=time.time()
    time.sleep(3)
    print('welcome to index page')
    stop_time=time.time()
    print('run time is %s' %(stop_time-start_time))
index()

修订一:

import time

def index():
    time.sleep(3)
    print('welcome to index page')

def home(name):
    time.sleep(5)
    print('welcome %s to home page' %name)

start_time=time.time()
index()
stop_time = time.time()
print('run time is %s' % (stop_time - start_time))

start_time=time.time()
home('egon')
stop_time = time.time()
print('run time is %s' % (stop_time - start_time))

修订二:(为了将其封装成一个工具方便调用)

import time

def index():
    time.sleep(3)
    print('welcome to index page')

def home(name):
    time.sleep(5)
    print('welcome %s to home page' %name)

def wrapper(func): #func=index
    start_time=time.time()
    func() #index()
    stop_time = time.time()
    print('run time is %s' % (stop_time - start_time))


wrapper(index) # 修改了原函数的调用方式

修订三:(因为调用方式改了)

import time

def index():
    time.sleep(3)
    print('welcome to index page')

def outter(func):  # func=最原始的index
    # func=最原始的index
    def wrapper():
        start_time = time.time()
        func()
        stop_time = time.time()
        print(stop_time - start_time)

    return wrapper

index = outter(index)  # 新的index=wrapper

index()  # wrapper()

9.无参装饰器升级版

# 无参装饰器完整版
import time
def index():
    time.sleep(1)
    print('welcome to index page')
    return 122

def home(name):
    time.sleep(3)
    print('welcome %s to home page'%name)

def timmer(func):
    def wrapper(*args,**kwargs):
        start_time=time.time()
        res=func(*args,**kwargs)
        stop_time=time.time()
        print(stop_time-start_time)
        return res
    return wrapper

index=timmer(index)
home=timmer(home)

home(name='egon')
index()

#无参装饰器模板
def outter(func):
    def inner(*args,**kwargs):
        res=func(*args,**kwargs)
        return res
    return inner

10.装饰器模版(重要)

# 务必掌握 
def outer(func):
    def inner(*args, **kwargs):
        # 执行被装饰对象之前可以做的额外操作
        res = func(*args, **kwargs)
        # 执行被装饰对象之后可以做的额外操作
        return res
    return inner

11.装饰器语法糖

import time
def timmer(func):
    def wrapper(*args,**kwargs):
        start_time=time.time()
        res=func(*args,**kwargs)
        stop_time=time.time()
        print(stop_time-start_time)
        return res
    return wrapper

@timmer #index=timmer(index)
def index():
    time.sleep(1)
    print('welcome to index page')
    return 122

@timmer # home=timmer(home)
def home(name):
    time.sleep(2)
    print('welcome %s to home page' %name)

index()
home('egon')

标签:index,day12,res,func,time,print,def
From: https://www.cnblogs.com/wangmiaolu/p/17909621.html

相关文章

  • Leetcode刷题day12-二叉树.前中后序遍历
    递归法实现前.中.后序遍历代码随想录(programmercarl.com)解题思路前序遍历:头->左->右中序遍历:左->头->右后序遍历:左->右->头递归法实现流程:1.定义递归函数;2.寻找递归终止条件;3.设计单层递归模块classSolution(): def__init__(self,val=0,left=None,right=None): sel......
  • day12栈与队列
    239.滑动窗口最大值;347.前K个高频元素;总结1滑动窗口最大值1.1思路封装一个deque类:主要构造pop、push的逻辑然后使用循环来进行遍历,更新最大值1.2代码二刷补充2前K个高频元素给定一个非空的整数数组,返回其中出现频率前k高的元素。示例1:输入:nums=[1,1,1,......
  • Day12 jvm 内存模型JMM
    1.jvm内存模型JMM原帖链接JMM控制Java线程之间的通信,决定一个线程对共享变量的写入何时对另一个线程可见。每条线程在自己的工作内存中对共享变量(副本)进行操作,JMM再负责把这些操作同步到主内存中JVM1.8用Metaspace(元空间)(在JVM外的本地内存中)取代了方法区(MethodArea)(在......
  • Day12 变量、常量、作用域
    变量变量:可以变化的量java是一种强类型语言,每个变量都必须声明其类型。java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。//数据类型变量名=值;可以使用逗号隔开来声明多个同类型变量(不建议这么做会很乱)注意事项:每个变量都有类型,类型可以是基本类......
  • day12 购物车系统实战
    注册函数:defregisiter():withopen(r"F:\pylearn\day12\购物车系统\账号密码.txt","r",encoding="utf8")asfr:user_dict=dict()data=fr.read()foriinrange(len(data.split())):user_dict[data.......
  • day12 函数高级
    day12函数高级课程目标:掌握函数嵌套、闭包、装饰器等高级知识点。今日概要:函数的嵌套闭包装饰器上述内容均属于函数部分必备知识,以后开发时直接和间接都会使用,请务必理解(重在理解,不要去死记硬背)。1.函数嵌套Python中以函数为作用域,在作用域中定义的相关数据只能被当......
  • Day12
    Java数组08:冒泡排序Idea部分快捷键/*main方法psvmSystem.out.println("Hello,World!");sout复制Ctrl+D代码块向上移动:Ctrl+Shift+向上方向键导包,生成变量Alt+Enter单行注释/取消Ctrl+/多行注释/取消注释先......
  • day128-spring boot依赖管理特性与自动配置特性
    springboot依赖管理特性父项目做依赖管理依赖管理:<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.4.RELEASE</version></parent>   其父项目:<......
  • 每日一练 | 华为认证真题练习Day124
    1、OSPFv3使用哪个区域号标识骨干区域?A.0B.3C.1D.22、某路由器OSPFv3邻接关系如下,则本路由器是ABR。A.对B.错3、IPv6地址中不包括下面哪种类型的地址?A.任播地址B.广播地址C.组播地址D.单播地址4、如果一个网络的网络地址为10.1.1.0/30,那么它的广播地址是()?A.10.1.1.4B.10......
  • Day12
    Java数组08:冒泡排序Idea部分快捷键/*main方法psvmSystem.out.println("Hello,World!");sout复制Ctrl+D代码块向上移动:Ctrl+Shift+向上方向键导包,生成变量Alt+Enter单行注释/取消Ctrl+/多行注释/取消注释先......