学习Python基础--------4

python装饰器

定义:本质是函数,(装饰其他函数)就是为其他函数添加附加功能

原则:1。不能修改被装饰的函数源代码

   2.不能修改被装饰的函数的调用

def test1():
    pass
def test2():
    pass

这是两个函数想为两个函数添加打印功能,那就在写一个打印函数然后再调用

def logger():
    print(‘logging‘)

def test1():
    pass
    logger()
def test2():
    pass
    logger()test1()test2()

装饰器通过@装饰器名来调用

def timer(func):
    def warpper(*args,**kwargs):
        start_time = time - time()
        func()
        stop_time=time.time()
        print(‘the func run time is%s‘%(stop_time-start_time)
    return warpper

@timmer   #装饰器的调用方式
def test1():
    time.sleep(3)
    print(‘in the test1‘)

test()

实现装饰器的知识:

1.函数即变量(定义一个函数就等于把函数体给了函数名)

2.高阶函数

  a.把函数名当做一个实参传给另外一个函数(不修改被装饰函数源代码为函数添加功能)

  b.返回之中包含函数名(不修改函数的调用方式)

3.嵌套函数

高阶函数+嵌套函数=装饰器

列表生成式

列表直接生成以后在赋值给a

a= [i*2 for i in rnge(10)]

[0,2,4,6,8,10,12,14,16,18]

生成器:只有在调用时才会生成相应的数据 ,只有一个__next__()方法

b是内存地址

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

for i in b:
    print(i)

实现斐波那契的生成器

def fib(max):
    n,a,b = 0,0,1
    while n<max:
        # print(b)
        yield b
        a,b = b,a+b
        #a= b    a =1,b=2, a=b, a=2
        # b = a+b   b= 2+2 = 4
        n= n+1
    return ‘-----------done---------------‘

# f=fib(10)
g= fib(6)
print(g.__next__())
print("======star loop=====")for i in g:    print (i)#如果数据过大无法知道长度需要异常处理
while True:    try:        x= next(g)        print(‘g:‘,x)    except StopIteration as e:        print(‘Generator return value:‘,e.value)        break

生成器的并行

# Author:Zhiyu Su
import time
def consumer(name):
    print(‘%s 准备吃孢子啦!‘%name)
    while True:
        baozi = yield
        print(‘包子[%s]来了,被[%s]吃了‘%(baozi,name))

c= consumer(‘chengronghua‘)
# c.__next__()
# b1= ‘韭菜馅‘
# c.send(b1)
# c.__next__()

def producer(name):
    c= consumer(‘A‘)
    c2 = consumer(‘B‘)
    c.__next__()
    c2.__next__()
    print(‘老子包子做好了‘)
    for i in range(10):
        time.sleep(1)
        print(‘做了1个包子分了两半‘)
        c.send(i)
        c2.send(i)

producer(‘alex‘)

迭代器

可以直接作用于for循环的数据类型有以下几种:

一类是集合数据类型,如listtupledictsetstr等;

一类是generator,包括生成器和带yield的generator function。

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

可以使用isinstance()判断一个对象是否是Iterable对象:

>>> from collections import Iterable

>>> isinstance([], Iterable)
True

 

而生成器不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,直到最后抛出StopIteration错误表示无法继续返回下一个值了。

*可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator

可以使用isinstance()判断一个对象是否是Iterator对象

生成器都是Iterator对象,但listdictstr虽然是Iterable,却不是Iterator

listdictstrIterable变成Iterator可以使用iter()函数:

因为Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。

Iterator甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。

python的内置方法

# Author:Zhiyu Su

#print(all([1,-5,3]))#判断数据是否为真  是返回True 否者返回fale
# print(any[1])
# a = (ascii([1,2,‘说‘]))  #把内存对象变成可打印字符串模式
# print(type(a))
# print(bin(1))  #把数字十进制转二进制
# bool(90)#判断真假

# a = bytes(‘abcde‘,encoding=‘utf-8‘)    #二进制
# b = bytearray(‘abcde‘,encoding=‘utf-8‘)   #可修改的二进制
# print(b[1])

# print(a.capitalize(),a)    #首字母大写

# def ggg():pass
# print(callable(ggg))    

# print(chr(88))  #把数字对应的acsii表反映出来
# print(ord(‘w‘))  #与chr相反

# code = ‘for i in range(10):print(i)‘  #把字符转换换代码
# c=compile(code,‘‘,‘exec‘)
# exec(c)
# exec(code)

# dir(x)#查取方法

# divmod()#底板除
# enumerate
# seasons = [‘Spring‘,‘Sunner‘,‘Fall‘,‘winter‘]
#
# print(list(enumerate(seasons)))
#[(0, ‘Spring‘), (1, ‘Sunner‘), (2, ‘Fall‘), (3, ‘winter‘)]

# eval()#数据字典变字符串

# def sayhi(n):
#     print(n)
#
# sayhi(3)
#
# # lambda n:print(n)(5)
# calc = lambda n:3 if n<4 else n    #匿名函数只能进行三元运算
# print(calc(5))

# res= filter(lambda n:n>5,range(10))  #一组数据过滤出你想要的来
# res = map(lambda n:n*2,range(10))
# res=[lambda i:i*2 for i in range(10)]

# import functools
# res = functools.reduce(lambda  x,y:x+y,range(10))#45
# res = functools.reduce(lambda  x,y:x*y,range(1,10))#362880
#
# print(res)

# a = frozenset([1,3,4,5,64,2,5,23,4])#不可变集合

# print(globals())   #整个文件的变量值
# hash( )
# print(hex(255)) #将数字转为16进制

# def test():
#     local_var = 333
#     print(locals())
# test()
# print(globals())
# print(globals().get(‘local_var‘))

# oct()#转八进制

# print(pow(3,5))  #3的5次方
# print(round(1.33555,2)) #保留两位数字

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

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

json和pickle数据序列化:把内存的对象变成字符串

json序列化

# Author:Zhiyu Su
import pickle

def sayhi(name):
    print(‘hello‘,name)
info = {
    ‘name‘:‘alex‘,
    ‘age‘:22,
    ‘func‘:sayhi
}
f=open(‘test.text‘,‘wb‘)
f.write(pickle.dumps( info))
# print(json.dumps(info))

f.close()

json反序列化

# Author:Zhiyu Su
import json

def sayhi(name):
    print(‘hello‘,name)
f = open(‘test.text‘,‘rb‘)

# data =eval( f.read())
data = json.loads(f.read())

print(data[‘age‘])

pickle序列化

# Author:Zhiyu Su
import pickle

def sayhi(name):
    print(‘hello‘, name)

info = {
    ‘name‘: ‘alex‘,
    ‘age‘: 22,
    ‘func‘: sayhi
}
f = open(‘test.text‘, ‘wb‘)
pickle.dump(info, f)  # 等同于f.write(pickle.dumps(info))
f.close()

pickle反序列化

# Author:Zhiyu Su
import pickle

def sayhi(name):
    print(‘hello‘,name)
f = open(‘test.text‘,‘rb‘)

data = pickle.load(f)  # data = pickle.loads(f.read())
print(data[‘func‘](‘alex‘))
时间: 2024-10-22 23:54:32

学习Python基础--------4的相关文章

Python基础课:一起学习python基础题

python最近老火了,万能开发语言,很多小伙伴们要么初学,要么从别的开发语言转过来的,如果你能把下面几道基础题不费劲的写出来,基础应该可以打80分,可以进行进阶的学习了,如果下面的题目如果做不出来,拜托不要耽误时间,赶快打好基础,勿在浮沙筑高台. 题目出给新鸟打基础的,实现答案的方法千千万,如果老鸟有更厉害的答案就不要喷了,先谢谢了. 还有新鸟先不要看答案,不要看答案,不要看答案,(重要的事情说三遍)自己先去解,用自己最简单的想法去实现,能用python自带的方法就不要自己造轮子. 好啦,开始

学习python基础规则

前面应该是记流水账的方式,毕竟学习的内容不多无法产出什么有效的内容. 这两天从开始下载Python开始学习,一路顺畅冒的问题,直到开始学习python的游戏规则,严格缩进.注释及‘’的使用等感觉还不错,多看几遍都可以记下来,但是没实操过还是有点记忆较差. python对象,也就是列表等使用规则和特征用导图的方式记忆效果不错: 后面的运算符和语句也是这样这样学习记忆: 你要问我记忆效果怎么样?我的回答是:目前只能理解其中的含义和基础规则,还谈不到复杂的应用上!这些游戏规则打算边实践边应用. 当前学

Python学习--Python基础语法

第一个Python程序 交互式编程 交互式编程不需要创建脚本文件,是通过 Python 解释器的交互模式进来编写代码. linux上你只需要在命令行中输入 Python 命令即可启动交互式编程,提示窗口如下: Window上在安装Python时已经已经安装了默认的交互式编程客户端,提示窗口如下: 在Python提示符中输入一下文本,然后按回车查看运行结果: print 'hello world'; 输出: hello world 脚本式编程 让我们来写一个简单的Python脚本,所有的Pytho

Python学习 - python基础

目录: 一. Python的安装 二. Hello World程序 三. 变量 四. 注释 五. 用户输入 六. 流控语句之 if 判断 七. 流控语句之 for 循环 八. 流控语句之 while 循环 一.  Python的安装 windows 1. 通过官网下载Python安装包: https://www.python.org/downloads/2. 安装下载的包, 一路next. 安装过程中可自定义安装路径等...3. 为计算机添加安装目录到环境变量, 以 安装路径 -> "C:

学习python基础环境

linux开发环境 一.在windows上安装vmware workstation 百度搜索vmware workstation下载并安装 在虚拟化vmware工具上安装centos系统 并使用putty远程登录centos (自带有python2.7) 二.在windows环境安装python并配置python的环境变量  PATH后追加python所在目录 三.下载一个notepad++ 或者 sublime并简单使用 # _*_ coding:utf-8 _*_ #用户登录 user=ra

学习Python基础---3.1

编程方法大概分三种 1.面向对象 2.面向过程 3.函数式编程 这三种编程方法都有自己的特点 面向对象      类    class 面向过程      过程  def 函数式编程   函数  得分 函数的定义 : 数学函数的定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的么一个确定的值,y都有唯一确定的值相对应,那么我们就把x称为自变量,y是x的函数.自变量x的取值范围叫做这个函数的定义域 编程语言中定义:函数式逻辑结构化和过程化的一种编程方法 #python中函数的定义方

学习Python基础--------5模块

主要内容 模块介绍 time和datetime模块 random os sys shutil json和picle shelve xml处理 hashlib re正则表达式 模块介绍1.定义 模块:用来从逻辑上组织python(变量,函数,类,逻辑,实现一个功能), 本质就是.py结尾的python文件(文件名test.py模块名test) 包:用来从逻辑上来组织模块的,本质就是一个目录(必须带有以个__init__.py文件) 2.导入方法 from . import test1 #从当前目录

廖雪峰网站—学习python基础知识(二)

1.list """ Python内置的一种数据类型是列表:list. list是一种有序的集合,可以随时添加和删除其中的元素. """ classmates = ['Michael', 'Bob', 'Mary'] print('classmates', classmates) print('len(classmates)= ', len(classmates)) print('classmates[0]=', classmates[0]) p

学习Python基础--------3

集合操作 集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重,把一个列表变成集合,就自动去重 关系测试,测试两组数据之前的交集,差集,并集等关系# Author:Zhiyu Su list_1 = [1,4,5,7,3,6,7,9] list_1 = set(list_1) #转换为集合 list_2 = set([2,6,0,66,22,8,4,]) print(list_1,list_2) ''' #交集 intersection print(list_1.intersection