python走起之第四话
本节大纲:
一:双层装饰器:
一个函数可以被多层装饰器进行装饰,函数渲染(编译)从下到上,函数执行从上到下。
如下程序:
1 #!/usr/bin/env python
2 #-*-coding:utf-8-*-
3 # author:liumeide
4
5 # USERINOF={'islogin':True}
6 USERINOF={'user_type':'2','islogin':True}
7 def login(func):
8 def inner_1(*args,**kwargs):
9 if USERINOF.get('islogin',None):
10 ret=func()
11 return ret
12 else:
13 print('login first!')
14 return inner_1
15 def check_user(func):
16 def inner(*args,**kwargs):
17 if USERINOF.get('islogin',None)==True and USERINOF.get('user_type',None)=='2':
18 ret=func()
19 return ret
20 else:
21 print('permission deny!!')
22 return inner
23 @login
24 @check_user
25 def index():
26 print('index')
27
28 index()
多层装饰器该如何理解呢?
上面的函数的可以执行顺序可以理解为:
首先:函数login、check_user、index加载到内存。在调用index函数的时候,执行index函数,因为index函数被check_user函数装饰,所以把check_user函数的内的inner函数体重新赋值给index,index函数体被当做
参数传入check_user函数。当满足inner函数的条件的时候被执行,新的函数index函数的函数体inner被login函数的所装饰,也就是说inner函数被重新赋值给inner_1函数。也就是说最后调用执行index()顺序:
先执行inner_1函数体----->在执行inner函数体-->在执行index原先的函数体。
多层装饰器以此类推,同样的原理。三层以上的装饰器很少使用。
二:字符串格式化:
%[(name)][flags][width].[precision]typecode
%号初始化字符串:
顺序传入参数。
执行名称传入参数
保留小数点后几位
当有占位符的时候 需要%%输出%如果没有占位符需要只写一个%在占位符的时候类似一个转义的意思。
1:
1 print('name:%s,age:%s'%('evil','22'))
2
3 name:evil,age:22
普通字符串的初始化,需要传入的实参和占位符的个数保持一致。
(name):按名字进行取值。
2:可以根据占位的name的key,根据后面的字典对应的value进行传入来进行传入实参。
1 print("Name:%(name)s"%{'name':'ok'})
2 Name:ok
3: flags一般和width宽度来一起配合使用,如果单纯的使用flags并没什么效果。很少使用这个功能。
1 print("qqqq%(name)+s"%{'name':'ok'})
2 qqqqok
2个一起配合使用:+10表示右对齐,字符串ok占用10个字符。右对齐;正数前加正好,负数前加负号
1 print("qqqq%(name)+10s"%{'name':'ok'})
2 qqqq ok
-号表示左对齐。左对齐;正数前无符号,负数前加负号;
空格 右对齐;正数前加空格,负数前加负号; 0 右对齐;正数前无符号,负数前加负号;用0填充空白处;
.precision 可选,小数点后保留的位数
但是没有居中的功能。
1 print("qqqq%(name)-10sqqq"%{'name':'ok'})
2 qqqqok qqq
print("%+10d" % 10)
+10
1 print("%-10d" %10)
2 10
1 print("%04d" % 5)
2 0005
1 print("%04d" % -5)
2 -005
1 print("% 4d" % 5)
2 5
1 print("%.2f" % 1.225)
2 1.23
typecode表示执行传入的字符串类型。有如下:
s,获取传入对象的__str__方法的返回值,并将其格式化到指定位置
r,获取传入对象的__repr__方法的返回值,并将其格式化到指定位置
c,整数:将数字转换成其unicode对应的值,10进制范围为 0 <= i <= 1114111(py27则只支持0-255);字符:将字符添加到指定位置
o,将整数转换成 八 进制表示,并将其格式化到指定位置
x,将整数转换成十六进制表示,并将其格式化到指定位置
d,将整数、浮点数转换成 十 进制表示,并将其格式化到指定位置
e,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(小写e)
E,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(大写E)
f, 将整数、浮点数转换成浮点数表示,并将其格式化到指定位置(默认保留小数点后6位)
F,同上
g,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是e;)
G,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是E;)
%,当字符串中存在格式化标志时,需要用 %%表示一个百分号
但是没有将整数转换成二进制功能。
1 print('%%%d'%5)
2 %5
1 print('------%c-----%o-------%x'%(65,15,15))
2 ------A-----17-------f
format函数初始化字符串:
[[fill]align][sign][#][0][width][,][.precision][type]
1 print('adad{0}adadada{0}dada{1}'.format(1,2))
2 adad1adadada1dada2
1 print('adad{name}adadada{age}'.format(name='OK',age=22))
2 adadOKadadada22
居中功能并用a填充宽度为10.
1 print('adad{name:a^10s}adadada{age}'.format(name='OK',age=22))
2 adadaaaaOKaaaaadadada22
左对齐<
1 print('adad{name:a<10s}adadada{age}'.format(name='OK',age=22))
2 adadOKaaaaaaaaadadada22
右对齐>
1 print('adad{name:a>10s}adadada{age}'.format(name='OK',age=22))
2 adadaaaaaaaaOKadadada22
转化百分比
print('this is {:%}'.format(0.2222))
this is 22.220000%
支持整数转化二进制输出:
1 print("---{0:d}----{0:b}---{0:o}--{1:%}".format(15,0.2))
2 ---15----1111---17--20.000000%
三:生成器和迭代器
具有生成一定条件数据的能力的对象叫做生成器。
具有取数据的能力叫做迭代器。
在进行处理大数据的时候,用生成器会降低内存的消耗,每一次取值生成一次,在下次取值的时候,内存会回收该值,避免了浪费内存。
其中filter函数和map函数返回的对象就是生成器。比如xrange函数返回的对象也是生成器。
1 a=[1,2,31,4]
2 f=filter(lambda a:a>3,a)
3
4 for i in f:
5 print(i)
6 print(f)
7 31
8 4
9 <filter object at 0x004C5B50>
生成器本身由函数创造的,如何把普通的函数转成生成器呢?
如果函数体内包含关键字yield 时这个函数就是生成器。
1 def fun():
2 print(111)
3 yield 1
4 fun()
5 print(fun())
6 <generator object fun at 0x00584780>
在调用函数的fun()时候并不执行函数。只有去取这个对象的时候进行生成。
1 def fun():
2 yield 1
3 yield 2
4 yield 3
5 fun()
6 for i in fun():
7 print('__%s'%i)
8 print(fun())
9 __1
10 __2
11 __3
12 <generator object fun at 0x004E4780>
当for循环执行时,执行函数体。第一次的时候,去函数func找yield 对应的值1 赋值给i输出,第二次从第一次的位置下一个的yield的值为2取值并赋值给i,直到取到所有的yield的结束循环。每一次取值生成对应的对象。
上面的函数fun是生成器而生成的结果fun()是迭代器,也就说对象具有可以被迭代,在迭代时候执行next方法取值,只能从前往后取值, 练习:基于生成器生成range功能。
1 def myrange(args):
2 st=0
3 while True:
4 if st >args:
5 return
6 yield st
7 st+=1
8 ret=myrange(9)
9 for i in ret:
10 print(i)
11 0
12 1
13 2
14 3
15 4
16 5
17 6
18 7
19 8
20 9
四:函数递归。执行本身的函数体,当满足一定条件退出,并把最后执行的结果返回给上个函数,如果没有条件限制会无限执行下去。
1 def fun(x):
2 x+=1
3 if x>3:
4 return 1
5 return fun(x)
6 t=fun(1)
7 print(t)
8 1
执行3次fun(x)函数。循环执行多次相同的函数体。
练习:实现累乘功能,比如输入3 实现3*2*1
1 def fun(x):
2 if x==1:
3 return 1
4 return x*fun(x-1)
5 print(fun(3))
6 6
五:模块
分类:内置模块、第三方模块、自定义模块。在python中叫模块其他语言叫类库。
使用模块:先import 导入后使用。
存在方式:.py文件。或者一个文件夹里有多个.py文件组成的一个模块。
自定义模块导入:
目录之间用.表示
如果同一级不通模块导入相同的方法该如何区分呢???
1:通过相对路径来区分
aaarticlea/png;base64,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" alt="" />request模块调用上面的2个co模块。如果路径层级不多可以这么写 如果层级过多呢?调用次数过多呢?
1 import lib.co
2 import common.co
3 common.co.login()
4 lib.co.login()
5 common OK
6 lib OK
简单的方法 将导入的模块进行别名操作:
1 from lib import co as f1
2 from common import co as f2
3 f1.login()
4 f2.login()
5 lib OK
6 common OK
下面的方法是我们经常用的。
模块的意义:便于管理代码。不同的功能的代码进行归类。
模块导入的依据:
1 import sys
2 print(sys.path)
3 C:\python2\day6
4 C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\python35.zip
5 C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\DLLs
6 C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\lib
7 C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32
8 C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\lib\site-packages
sys.path是一个路径的列表。默认python 有限搜索当前py文件的目录依次搜索。所以当我们自定义模块时候可以有2种方式让python 找到我们定义的模块:
1:把自定义模块加入这个列表(append())
2:把自定义的模块加入上面的目录之中。
这样在导入模块的时候不会出现:ImportError: No module named 'xxx'
那怎么找出自己模块所在目录呢?
1 import os
2 print(os.path.abspath(__file__))
3 print(os.path.dirname(os.path.abspath(__file__)))
4 print(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
5
6 C:\python2\day6\s2.py
7 C:\python2\day6
8 C:\python2
根据自己需求将自己的变量导入sys.path即可。
模块的名称:不要和系统的内置模块的名字冲突。
第三方模块:1:pip进行安装
2:源码进行安装。
安装第三方模块:requests
pip install requests
常用模块介绍:
json模块:
常用函数dums()、dum();loads()、load()
对于加s参数和不加s参数区别:
加s的是直接可以对python 的数据转换成json串(dums())或者直接将json串转换成python能识别的数据类型。而不加s的是将python的数据转换成json串并将json串写入文件中,或者将文件中的json串转换成python的基本数据。
1 data=[1,2,3,4,(1,2,True)]
2 obl=json.dumps(data)
3 with open('data.txt','w') as f1:
4 f1.write(obl)
5 <class 'str'> [1, 2, 3, 4, [1, 2, true]]
如果需要写入需要操作文件才能写入。
1 data=[1,2,3,4,(1,2,True)]
2 obl=json.dumps(data)
3 t_load=json.loads(obl,encoding='utf8')
4 print(type(t_load),t_load)
5 <class 'list'> [1, 2, 3, 4, [1, 2, True]]
在将python基本数据类型进行json转换的时候,会将python的一些数据类型或者相应的值进行转换,比如上面的python的元组转换json时候变为列表。True变为 true。
转换表如下:
aaarticlea/png;base64,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" alt="" />
跨语言平台常用该模块。该模块可以将python的基本数据类型(列表、字典)转换成字符串----序列化。也可以将字符串形式的python 类型字符创转换成对应的数据类型(列表、字典)--反序列化。
1 import json
2 list_1=[1,2,3,4,]
3 # json.dump(list_1,open('json.txt','w'))
4 obj=json.load(open('json.txt','r'))
5 print(obj)
6 [1, 2, 3, 4]
pickle模块:可以将非python数据类型的数据进行序列化和反序列化。存储方式是二进制。所以要以wb或者rb进行相关的dums和loads
1 import pickle
2 a='aa'
3 pickle.dump(bytes(a,encoding='utf-8'),open('pickle.txt','wb'))
pickle.dumps()将相应的数据类型转换成字节。如果不指定编码,python解释器会用默认编码进行处理。
1 import pickle
2 data=[1,2,3,4,(1,2,True)]
3 t=pickle.dumps(data)
4 print(t,type(t))
5 b'\x80\x03]q\x00(K\x01K\x02K\x03K\x04K\x01K\x02\x88\x87q\x01e.' <class 'bytes'>
1 import pickle
2 a='aa'
3 # pickle.dump(bytes(a,encoding='utf-8'),open('pickle.txt','wb'))
4 t=pickle.load(open('pickle.txt','rb'))
5 s=str(t,encoding='utf-8')
6 print(s)
7 aa
import pickle
data=[1,2,3,4,(1,2,True)]
t=pickle.dumps(data)
t_load=pickle.loads(t)
print(t_load,type(t_load))
[1, 2, 3, 4, (1, 2, True)] <class 'list'>
在Django中会用到经常用到pickle模块。
requests模块:属于第三方模块需要进行手动安装(pip install requests)
进入python安装目录:E:\python3.6\Scripts
运行:pip.exe install request
import requests
import json
res=requests.get("http://wthrcdn.etouch.cn/weather_mini?city=北京")
res.encoding='utf-8'
print(type(res))
dict_1=json.loads(res.text)
print(dict_1)
python走起之第四话的更多相关文章
- python走起之第八话
1. Socket介绍 概念 A network socket is an endpoint of a connection across a computer network. Today, mos ...
- python走起之第六话
面向过程 VS 面向对象 编程范式 编程是 程序 员 用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程 , 一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大 ...
- python走起之第五话
模块 1.自定义模块 自定义模块就是在当前目录下创建__init__.py这个空文件,这样外面的程序才能识别此目录为模块包并导入 上图中libs目录下有__init__.py文件,index.py程序 ...
- python走起之第三话
一. SET集合 set是一个无序且不重复的元素集 class set(object): """ set() -> new empty set object set ...
- python走起之第十七话
选择器 #id 概述 根据给定的ID匹配一个元素. 使用任何的元字符(如 !"#$%&'()*+,./:;<=>?@[\]^`{|}~)作为名称的文本部分, 它必须被两个 ...
- python走起之第十三话
前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,其实这个认识是不全面的,跳板功能只是堡垒机所具备的功能属性中的其中 ...
- Paddle Graph Learning (PGL)图学习之图游走类模型[系列四]
Paddle Graph Learning (PGL)图学习之图游走类模型[系列四] 更多详情参考:Paddle Graph Learning 图学习之图游走类模型[系列四] https://aist ...
- Perl,Python,Ruby,Javascript 四种脚本语言比较
Perl 为了选择一个合适的脚本语言学习,今天查了不少有关Perl,Python,Ruby,Javascript的东西,可是发现各大阵营的人都在吹捧自己喜欢的语言,不过最没有争议的应该是Javascr ...
- python学习笔记--Django入门四 管理站点--二
接上一节 python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...
随机推荐
- lr并发量和迭代的区别
1.并发量 并发量也就是同时运行的量.比如100个用户同时登录,那么并发量就是100.当然这100个用户可以进行参数化,也可以采用设置虚拟用户数(vuser). 2.迭代 迭代就是单个用户运行的次数. ...
- Mac OS 电脑播放 iPhone音乐
http://apple.stackexchange.com/questions/6173/can-i-play-audio-from-my-iphone-on-my-mac Simple, and ...
- LeetCode Reconstruct Itinerary
原题链接在这里:https://leetcode.com/problems/reconstruct-itinerary/ 题目: Given a list of airline tickets rep ...
- shopnc导入商品到大商创
<?php //select member_name user_name,member_mobile mobile_phone,member_email email,member_passwd ...
- JAVA邮件发送的简单实现
JAVA MAIL是利用现有的邮件账户发送邮件的工具,比如说,我在网易注册一个邮箱账户,通过JAVA Mail的操控,我可以不亲自登录网易邮箱,让程序自动的使用网易邮箱发送邮件.这一机制被广泛的用在注 ...
- webservice的简单示例的实现步骤
前段时间在webservice的问题上纠结了很长时间,本来想写在thinkphp的框架里面,可是怎么也实现不了,目前为止也仅仅是学会的没有框架的接口的开发. 在此资源共享一下步骤: 首先我创建的文件有 ...
- leetcode 111
题目描述: Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along th ...
- JS创建对象总结
javascript创建对象的方法总结 Javascript创建对象 最简单的方法:创建object实例. var person=new Object(); person.name="Joe ...
- [转]JAVA程序执行顺序,你了解了吗:JAVA中执行顺序,JAVA中赋值顺序
本文主要介绍以下两块内容的执行顺序,熟悉的大虾可以直接飘过. 一.JAVA中执行顺序 静态块 块 构造器 父类构造器 二.JAVA中赋值顺序 静态块直接赋值 块直接赋值 父类继承的属性已赋值 静态变量 ...
- RCNN 和SPPnet的对比
一.RCNN: 1.首先通过选择性搜索,对待检测的图片进行搜索出2000个候选窗口. 2.把这2k个候选窗口的图片都缩放到227*227,然后分别输入CNN中,每个候选窗台提取出一个特征向量,也就是说 ...