W4_python_decorator_generator_Iteratable_Iterator_json_pickle

W4_python_decorator_generator_Iteratable_Iterator

  • 50.第03章节-Python3.5-装饰器详解
  • 51.第04章节-Python3.5-装饰器应用详解
  • 52.第05章节-Python3.5-装饰器之函数即变量
  • 53.第06章节-Python3.5-装饰器之高阶函数
  • 54.第07章节-Python3.5-装饰器之嵌套函数
  • 55.第08章节-Python3.5-装饰器之案例剖析1
  • 56.第09章节-Python3.5-装饰器之案例剖析2
  • 57.第10章节-Python3.5-装饰器之终极讲解
  • 58.第11章节-Python3.5-迭代器与生成器1
  • 59.第12章节-Python3.5-迭代器与生成器2
  • 60.第13章节-Python3.5-迭代器与生成器并行
    • Iterable isinstance
    • Iterator
    • iter()方法
  • 61.第14章节-Python3.5-内置方法详解1-2
  • 63.第16章节-Python3.5-Json与pickle数据序列化
  • 64.第17章节-Python3.5-软件目录结构规范
  • 65.第18章节-w4-practices
  • 获取文件所在路径,添加到sys.path

50.第03章节-Python3.5-装饰器详解

1.装修器定义:装饰器本质是函数,(装饰其它函数)就是为其它函数添加附件功能
2.原则:a)不能修改被装饰函数的源代码
b)不能修改被装饰函数的调用方式

51.第04章节-Python3.5-装饰器应用详解

52.第05章节-Python3.5-装饰器之函数即变量

53.第06章节-Python3.5-装饰器之高阶函数

高阶函数:
a)把一个函数名当作实参传给另一个函数(可以实现装修器中的:不能修改被装饰函数的源代码的情况下为函数增加功能)

def bar():print("in the bar")def test(func):print(func)func()test(bar)

b)返回值中包含函数名(可以实现装修器中的:不修改函数的调用方式)

import time
def bar():time.sleep(3)print("in the bar")def test(func):print(func)return func# print(test(bar))
bar = test(bar)
bar()  #run bar

返回顶部

54.第07章节-Python3.5-装饰器之嵌套函数

高阶函数 + 嵌套函数 => 装修器

x = 0
def gradpa():x = 1def dad():x = 2def son():x = 3print(x)son()dad()
gradpa()

返回顶部

55.第08章节-Python3.5-装饰器之案例剖析1

装饰器一:

import time
def timer(func):def deco():start_time = time.time()func()stop_time = time.time()print("the func run time is :{runtime}".format(runtime = (stop_time - start_time)))return deco@timer
def test1():time.sleep(2)print("in the test1")test1()

返回顶部

56.第09章节-Python3.5-装饰器之案例剖析2

装饰器二:解决参数传递问题

import time
def timer(func):def deco(*args,**kwargs):start_time = time.time()func(*args,**kwargs)stop_time = time.time()print("the func run time is :{runtime}".format(runtime = (stop_time - start_time)))return deco@timer
def test1():time.sleep(2)print("in the test1")@timer
def test2(name,age):time.sleep(2)print("in the test2:",name,age)test1()
test2("alex",age = 32)

返回顶部

57.第10章节-Python3.5-装饰器之终极讲解

user = "wu"
passwd = "pass"def auth(func):def wrapper(*args,**kwargs):username = input("please input username:")password = input("please input password:")if user == username and passwd == password:print("\033[32;1mUser has passed authentication\033[0m")res = func(*args,**kwargs)print("---after authentication---")return reselse:print("\033[31;1mInvalid username or password\033[0m")return wrapperdef index():print("welcome index page")@auth
def home():print("welcome home page")def bbs():print("welcome bbs page")home()

ps:
1.理解参数传递过程
2.当层级较多时,可断点调试

#!/usr/bin/env python
# -*-coding:utf-8-*-
# author: Mr.Wu
user = "wu"
passwd = "pass"def auth(auth_type):def outer_wrapper(func):def wrapper(*args, **kwargs):if auth_type == "local":username = input("please input username:")password = input("please input password:")if user == username and passwd == password:print("\033[32;1mUser has passed authentication\033[0m")res = func(*args, **kwargs)print("---after authentication---")return reselse:print("\033[31;1mInvalid username or password\033[0m")elif auth_type == "ldap":print("ldap authenticatoin")res = func(*args, **kwargs)print("---after authentication---")return resreturn wrapperreturn outer_wrapperdef index():print("welcome index page")@auth(auth_type="local")
def home():print("welcome home page")return "from home"@auth(auth_type="ldap")
def bbs():print("welcome bbs page")home()
print(home())
bbs()

返回顶部

58.第11章节-Python3.5-迭代器与生成器1

生成器:只有在调用时才会生成相应的数据
生成器的优点:可以节省内存资源
比较列表与生成器:

a = [ i*2 for i in range(10000000) ]
b = ( i*2 for i in range(10000000) )

for n in b:
print(n)
b.next() #只有一个next方法,在python2中,为b.next()

#斐波拉契
# def fib(max):
#     a,b,n = 0,1,0
#     while n < max:
#         a,b = b,a + b
#         print(a)
#         n = n + 1
#     return "done"
#
# fib(10)#转为生成器
def fib(max):a,b,n = 0,1,0while n < max:a,b = b,a + byield an = n + 1return "done"f = fib(10)
print(f.__next__())
print("testxxx")
print(f.__next__())
print(f.__next__())
print("testxxx")
print(f.__next__())

返回顶部

59.第12章节-Python3.5-迭代器与生成器2

生成器案例:

import timedef consumer(name):print("{name}准备吃包子了".format(name = name))while True:baozi = yieldprint("包子{baozi}分给{name}吃了".format(baozi=baozi,name=name))
# c1 = consumer("user1")
# c1.__next__()
# c1.send("1")
# c1.send("2")def producer(name):c1 = consumer("c1")c2 = consumer("c2")c1.__next__()c2.__next__()print("开始做包子了")baozi_no = 1for i in range(10):time.sleep(1)print("{name}做了2个包子".format(name=name))c1.send(baozi_no)c2.send(baozi_no+1)baozi_no = baozi_no + 2producer("alex")

返回顶部

60.第13章节-Python3.5-迭代器与生成器并行

Iterable isinstance

可以直接作用于for循环的对象统称为可迭代对象:Iterable

from collections import Iterableprint(isinstance([],Iterable))
print(isinstance("",Iterable))
print(isinstance({},Iterable))
print(isinstance((),Iterable))
print(isinstance(100,Iterable))

Iterator

可以被next()函数调用并且不断返回下一个值的对象称为迭代器:Iterator
查看对像的方法:dir(对象)
使用

from collections import Iteratorprint(isinstance((x for x in range(5)), Iterator))

iter()方法

iter()方法可以把可迭代对象转变为一个迭代器对象
a = iter(['a','b','c'])
print(a.next())
print(a.next())

返回顶部

61.第14章节-Python3.5-内置方法详解1-2

dir()
exec() #执行一段代码
eval() #将字典形式的字符串处理成字典类型
map()
globals() #获取当前文件中所有全局变量,注:不包括函数中的局部变量
hash()
bin()
oct()
hex()
sorted()
把字典按key排序打印

a = {6:2,8:0,1:4,-5:6,99:11,4:32}
print(a.items())
print(sorted(a.items()))
print(sorted(a.items(),key=lambda x:x[1]))

zip()

a = ['a','b','c','d']
b = [1,2,3,4,5]for i in zip(a,b):print(i)

locals()

返回顶部

63.第16章节-Python3.5-Json与pickle数据序列化

json dumps/dump

import jsondata = {"key1":"value","key2":[1,2,3]
}with open("json_1.txt","w") as f:f.write(json.dumps(data))#等价于import jsondata = {"key1":"value","key2":[1,2,3]
}with open("json_1.txt","w") as f:json.dump(data,f)

json loads/load

import jsonwith open("json_1.txt", "r") as f:data = json.loads(f.read())
print(data)
# 等价于
import jsonwith open("json_1.txt", "r") as f:data = json.load(f)print(data)

json编码问题

import json
dic = (1:'中国',2:'b')
f = open('test_json.txt','w',encoding='utf-8')
json.dump(dic, f, ensure_ascii=False)
#json.dump(dic, f)#感受下如何不加ensure_ascii=False后,文件内容的区别
f.close()
f = open('test_json.txt',encoding='utf-8')
res = json.load(f)
f.close()
print(type(res), res)

pickle dumps/dump


import pickledef func_test(name):print(name)data = {"pickle":"dump","func":func_test
}# with open("pickle_1.txt","wb")as f:
#     f.write(pickle.dumps(data))
#等价于with open("pickle_1.txt","wb")as f:pickle.dump(data,f)

pickle loads/load

import pickledef func_test(name):print("hello",name)# with open("pickle_1.txt","rb")as f:
#     print(pickle.loads(f.read())["func"]("test_name"))#等价于with open("pickle_1.txt","rb")as f:print(pickle.load(f)["func"]("test_name"))

返回顶部

64.第17章节-Python3.5-软件目录结构规范

注意:项目首字母大写

Atm/
├── bin
│   ├── atm.py
│   └── __init__.py
├── conf
│   └── __init__.py
├── core
│   ├── __init__.py
│   └── main.py
├── docs
│   ├── abc.rst
│   └── conf.py
├── logs
│   └── __init__.py
├── README
├── requirements.txt
└── setup.py

目录间程序调用
假如从bin下的atm调用core下的main
main.py

print("welcome to atm")

atm.py

import os, sysBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print(BASE_DIR)
sys.path.append(BASE_DIR)from core import mainmain

返回顶部

65.第18章节-w4-practices

模拟实现一个ATM + 购物商城程序

额度 15000或自定义
实现购物商城,买东西加入 购物车,调用信用卡接口结账
可以提现,手续费5%
每月22号出账单,每月10号为还款日,过期未还,按欠款总额 万分之5 每日计息
支持多账户登录
支持账户间转账
记录每月日常消费流水
提供还款接口
ATM记录操作日志
提供管理接口,包括添加账户、用户额度,冻结账户等。。。
用户认证用装饰器
示例代码 https://github.com/triaquae/py3_training/tree/master/atm

获取文件所在路径,添加到sys.path

from os import getcwd,path
from sys import path as sys_path
sys_path.insert(0,path.dirname(getcwd()))

python_控制台输出带颜色的文字方法:
https://www.cnblogs.com/Eva-J/p/8330517.html

 

转载于:https://www.cnblogs.com/rootid/p/9388396.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266470.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全国计算机等级考试题库二级C操作题100套(第32套)

第32套&#xff1a; 给定程序中&#xff0c;函数fun的功能是:在形参ss所指字符串数组中&#xff0c;将所有串长超过k的字符串中右边的字符删除&#xff0c;只保留左边的k个字符。ss所指字符串数组中共有N个字符串&#xff0c;且串长小于M。 请在程序的下划线处填入正确的内容并…

DIV中文字不换行解决办法

解决办法如下&#xff1a;word-wrap &#xff1a; normal | break-word设置或检索当当前行超过指定容器的边界时是否断开转行。normal&#xff1a;控制连续文本换行。break-word&#xff1a;内容将在边界内换行。如果需要&#xff0c;词内换行&#xff08;word-break&#xff0…

python竞赛试题及答案_竞赛信息 | 蓝桥杯大赛Python组

蓝桥杯大赛 青少年创意编程Python组 竞赛规则及样题 — 竞赛规则 — 1 竞赛时长 Python编程组竞赛的选拔赛、省赛及国赛&#xff0c;竞赛时长均为120分钟&#xff0c;详细赛程安排另行通知。 2 竞赛形式 竞赛形式为个人赛&#xff0c;一人一机。 选手须自带笔记本计算机&#x…

全国计算机等级考试题库二级C操作题100套(第33套)

第33套&#xff1a; 给定程序的功能是&#xff1a;调用函数fun将指定源文件中的内容复制到指定的目标文件中&#xff0c;复制成功时函数返回值为1&#xff0c;失败时返回值为0。在复制的过程中&#xff0c;把复制的内容输出到终端屏幕。主函数中源文件名放在变量sfname中&#…

Civil 3D 中使用COM API导入DEM数据创建曲面

Civil 3D提供的基于.net的API和基于COM的API&#xff0c;现在推荐大家使用.net API,但有时也需要使用COM API。 这个例子演示如何使用COM API来导入DEM数据生成Civil 3D曲面。 Civil 3D开发中使用COM API需要添加的引用比较啰嗦&#xff0c;建议使用向导创建项目简化操作&#…

牛客网第4场A

链接&#xff1a;https://www.nowcoder.com/acm/contest/142/A 来源&#xff1a;牛客网题目描述 A ternary string is a sequence of digits, where each digit is either 0, 1, or 2. Chiaki has a ternary string s which can self-reproduce. Every second, a digit 0 is i…

全国计算机等级考试题库二级C操作题100套(第34套)

第34套&#xff1a; 用筛选法可得到2&#xff5e;n&#xff08;n<10000&#xff09;之间的所有素数&#xff0c;方法是&#xff1a;首先从素数2开始&#xff0c;将所有2的倍数的数从数表中删去(把数表中相应位置的值置成0)&#xff1b;接着从数 表中找下一个非0数&#xff…

谈谈NiTE 2手部跟踪在彩色图像上的显示

主要内容&#xff1a; NiTE2手部跟踪流程代码演示总结一、NiTE2手部跟踪流程 我自己都感觉到天天在重复着相同的代码&#xff0c;但我觉得没什么不好的&#xff0c;对于新东西的学习只有在重复再重复的过程中&#xff0c;才能积累经验&#xff0c;较少犯“低级错误”的几率&…

全国计算机等级考试题库二级C操作题100套(第35套)

第35套&#xff1a; 给定程序中&#xff0c;函数fun的功能是建立一个NN的矩阵。 矩阵元素的构成规律是&#xff1a;最外层元素的值全部为1&#xff1b;从外向内第2层元素的值全部为2&#xff1b;第3层元素的值 全部为3&#xff0c;…依次类推。例如&#xff0c;若N5&#xff0…

一些杂想

一些杂想 Django 笔记 &#xff08;目前个人认为&#xff0c;Django 还是应该使用 Django1.11版本&#xff0c;稳定长期支持到2020年&#xff0c;兼容性也好。&#xff09; Django MTV 构架下的网站开发步骤&#xff1a; 使用 virtualenv 创建并启用虚拟机环境。使用 pip insta…

java 应用是单机集群_【架构】Tomcat单机部署多应用Windows

Tomcat单机部署多应用-Windows1、添加新增的Tomcat相关环境变量CATALINA_BASE C:\tomcat1CATALINA_HOME C:\tomcat1TOMCAT_HOME C:\tomcat1CATALINA_2_BASE C:\tomcat2CATALINA_2_HOME C:\tomcat2TOMCAT_2_HOME C:\tomcat22、第一个tomcat不变3、打开第二个tomcat目录bin…

java long类型转string_JavaSE的学习——数据类型

数据类型分为基本数据类型和引用数据类型两大类在下面数据类型的介绍中只会介绍8种基本数据类型和引用数据类型中的类类型中的一个类String基本数据类型1. 计算机中的存储单位8bit 1byte 1024byte 1KB 1024KB 1M1024M 1GB1024GB 1T2. 整数型数据byte short int long1.long…

DWTagList

2019独角兽企业重金招聘Python工程师标准>>> DWTagList 根据给定的 NSArray 数组来创建标签列表&#xff0c;可自定义字体、颜色和其他属性。 转载:http://www.adobex.com/ios/source/details/00000820.htm 转载于:https://my.oschina.net/u/868244/blog/106245

全国计算机等级考试题库二级C操作题100套(第36套)

第36套&#xff1a; 给定程序中,函数fun的功能是:统计出带有头结点的单向链表中结点的个数, 存放在形参n所指的存储单元中。 请在程序的下划线处填入正确的内容并把下划线删除&#xff0c;使程序得出正确的结果。 注意&#xff1a;源程序存放在考生文件夹下的BLANK1.C中。 不得…

爬虫(爬虫原理与数据抓取)

通用爬虫和聚焦爬虫 根据使用场景&#xff0c;网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种. 通用爬虫 通用网络爬虫 是 捜索引擎抓取系统&#xff08;Baidu、Google、Yahoo等&#xff09;的重要组成部分。主要目的是将互联网上的网页下载到本地&#xff0c;形成一个互联网内容的…

java 注解数组初始化_Java 之 注解的定义

一、元注解1、元注解概述元注解&#xff1a;用于描述注解的注解2、常用的元注解(1)Target&#xff1a;描述注解能够作用的位置Target 里面是一个 ElementType[] value() 的枚举数组&#xff0c;这个数组里面指定了10个常量对象。源码&#xff1a;1 public enumElementType {2 /…

python is beautiful_Python list 和 str 互转

一、list转字符串 命令&#xff1a;.join(list) 其中&#xff0c;引号中是字符之间的分割符&#xff0c;如“,”&#xff0c;“;”&#xff0c;“\t”等等 如&#xff1a; list [1, 2, 3, 4, 5] .join(list) 结果即为&#xff1a;12345 ,.join(list) 结果即为&#xff1a;1,2,…

SQL Server Insert 操作效率(堆表 VS 聚集索引表)

“SQL Server的Insert操作在堆表或者聚集索引表的时候&#xff0c;哪个效率更高&#xff1f;为什么高&#xff1f;” 之前有同事问过我这个问题&#xff0c;为了确保日志库的记录效率&#xff0c;于是我做了简单测试了&#xff0c;首先要先强调几点概念&#xff1a; 堆表&#…

React 回忆录(三)使用 React 渲染界面

Hi 各位&#xff0c;欢迎来到 React 回忆录&#xff01;? 在上一章中&#xff0c;我介绍了 React 框架的“五大特点”&#xff1a;虚拟DOM&#xff0c;组件化&#xff0c;声明式代码&#xff0c;单向数据流和纯粹的 JavaScript 语法。在本章中&#xff0c;我们将谈到 React 是…

linux java javac版本_linux下java 和 javac version 不一致问题

centos下我新安装了个jdk1.7的版本 &#xff0c;vi profile 之后 java -version 是新版本&#xff0c;想在看看javac -version 发现还是1.6的之前安装了1.6的 那好咱就卸载他查找Java 版本信息rpm -qa|grep java返回如下信息 xorg-x11-drv-savage-2.1.1-5.fc6avahi-glib-0.6.16…