1、类(Class)

Python中的类的概念与其它语言类似,比较特殊的是protected和private在python中没有明确的限制,通常的惯例是用单下划线_表示protected,用双下划线开头__的表示private。

  1. class A:
  2. '''Class A'''
  3. def __init__(self,x,y,name):
  4. self.x=x
  5. self.y=y
  6. self.name=name
  7. def introduce(self):
  8. print(self.name)
  9. def greeting(self):
  10. print("what's up!")
  11. def __12norm(self):
  12. return self.x**2+self.y**2
  13. def cla_12norm(self):
  14. return self.__12norm()
  15. a=A(11,11,'Lenaa')
  16. print(A.__doc__) #打印类解释信息“Class A"
  17. a.introduce()
  18. a.greeting()
  19. print(a.name)
  20. print(a.cla_12norm())
  21. print(a._A__12norm()) #仍然可以访问,只是名字不一样
  22. print(a.__12norm()) #报错,是私有成员

类的初始化使用的是__init__(self,),所有成员变量都是self的,所以以self.开头。

双下划线开头的变量触发了Python中一种叫做name mangling的机制,其实只是名字变了,仍然可以通过前面加上”_类名“的方式访问

  1. print(a._A__12norm()) #仍然可以访问,只是名字不一样。

Python中的继承非常简单,最基本的继承方式就是定义类的时候把父类放入括号里即可。

  1. class B(A):
  2. """Class B inheritenced from A"""
  3. def greeting(self):
  4. print("how's going!")
  5. b=B(12,12,'Flauree')
  6. b.introduce()
  7. b.greeting() # how's going!进行了方法覆盖
  8. print(b.name) # 输出新的name___Flauree

2、map、reduce和filter

map 可以用于可遍历结构的每个元素执行同样的操作,批量操作:

  1. y =map(lambda x:x**2,[1,2,3,4]) #[1,4,9,16]
    for i in y:
    print(i)
    map(lambda x,y:x+y,[1,2,3],[5,6,7]) #[6,8,10]

reduce则是对可遍历结构的元素按顺序进行两个输入参数的操作,并且每次的结果保存作为下次操作的第一个输入参数,还没有遍历的元素作为第二个输入参数:

  1. reduce(lambda x,y:x+y,[1,2,3,4]) #((1+2)+3)+4=10

filter根据条件课对遍历结构进行筛选:

  1. filter(lambda x:x%2,[1,2,3,4,5]) #筛选奇数,[1,3,5]

对于filter和map,在python2中返回结果是列表,在Python3中返回的是生成器。

zip()函数:可以把多个列表关联起来,可以按顺序同时输出两个列表对应位置的元素对。

zip()函数不会自动帮助判断两个列表是否长度一样,所以最终结果会以短的列表为准,想要以长的列表为准,可以考虑itertools模块中的izip_longest()函数。

  1. for x in zip([1,2,3],[4,5,6]):
  2. print(sum(x)) # 5,7,9

3、文件操作和pickle

在python中,推荐用上下文管理器(with-as)来打开文件,IO资源的管理更加安全,不用记着给文件执行close()函数,假设有个文件name_age.txt,里面存储着名字和年龄,格式如下:

Tom,8

Jerry,7

Tyke,3

....

  1. # 读取文件内容并全部显示
  2. with open('name_age.txt','r') as f:
  3. lines=f.readlines()
  4. for line in lines:
  5. name,age=line.rstrip().split(',')
  6. print('{} is {} years old.'.format(name,age))
  7. # Tom is 8 years old.
  8. # Jerry is 7 years old.
  9. # Tyke is 3 years old.

open()函数的第一个参数是文件名,第二个参数是模式,文件的模式一般有4种:读取(r)、写入(w)、追加(a)、和读写(r+)。

有时候进行文件操作时希望把对象进行序列化,可以考虑用pickle模块。

  1. import pickle
  2. lines=[
  3. "I'm like a dog chasing cars.",
  4. "I wouldn't know what to do if ..",
  5. "I'd just do things."
  6. ]
  7. with open('lines.pkl','wb') as f: #序列化并保存成文件
  8. pickle.dump(lines,f)
  9. with open('lines.pkl','rb')as f: #从文件读取反序列化
  10. lines_back=pickle.load(f)
  11. print(lines_back) #和lines一样

注意:序列化的时候就要使用b模式了。Python2中有个效率更高的pickle脚cPickle,用法和pickle一样,在Python3中就只有一个pickle。

4、异常操作

在深度学习中,尤其是数据准备阶段,常常遇到IO操作,遇到异常的可能性很高,采用异常处理可以保证数据处理的过程中不被中断,并对有异常的情况进行记录。

  1. for filepath in filelist: #filelist是文件路径的列表
  2. try:
  3. with open(filepath,'r') as f:
  4. #执行数据处理的相关工作
  5. print('{} is processed!'.format(filepath))
  6. except IOError:
  7. print('{} with IOError!'.format(filepath))
  8. # 异常的相应处理

5、多进程(multiprocessing)

深度学习中对数据高效处理常常会需要并行,这时多进程就派上了用场。假设在数据准备阶段,有很多文件需要运行一定的预处理,正好有多台核服务器,我们希望把这些文件分成32份,并行处理:

  1. from multiprocessing import Process
  2. def process_data(filelist):
  3. for filepath in filelist:
  4. print('Processing {}...'.format(filepath))
  5. #处理数据
  6. if __name__=='__main__':
  7. #如果是在windows下,需要加上freeze_support()函数
  8. freeze_support()
  9. # full_list包含了要处理的全部文件列表
  10. n_total=len(full_list) #一个远大于32的数
  11. n_processes=32
  12. # 每段子列表的平均长度
  13. length=float(n_total)/float(n_processes)
  14. # 计算下标,尽可能均匀地划分输入文件列表
  15. indices=[int(round(i*length)) for i in range(n_processes+1)]
  16. # 生成每个进程要处理的子文件列表
  17. sublists=[full_list[indices[i]:indices[i+1]]for i in range(n_processes)]
  18. # 生成进程
  19. processes=[Process(target=process_data(),args=(x,))for x in sublists]
  20. # 并行处理
  21. for p in processes:
  22. p.start()
  23. for p in processes:
  24. p.join()

第五节,python基本语法的更多相关文章

  1. 第四百一十五节,python常用排序算法学习

    第四百一十五节,python常用排序算法学习 常用排序 名称 复杂度 说明 备注 冒泡排序Bubble Sort O(N*N) 将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 ...

  2. 第四百零五节,centos7下搭建sentry错误日志服务器,接收python以及Django错误,

    第四百零五节,centos7下搭建sentry错误日志服务器,接收python以及Django错误, 注意:版本,不然会报错 Docker >=1.11Compose >1.6.0 通过d ...

  3. 第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询

    第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询 1.elasticsearch(搜索引擎)的查询 elasticsearch是功能 ...

  4. 第三百五十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy信号详解

    第三百五十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy信号详解 信号一般使用信号分发器dispatcher.connect(),来设置信号,和信号触发函数,当捕获到信号时执行 ...

  5. 第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图

    第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图 1.基本概念 2.反爬虫的目的 3.爬虫和反爬的对抗过程以及策略 scra ...

  6. 第8.4节 Python类中不是构造方法却胜似构造方法的__new方法__深入剖析:语法释义

    一.    引言 在本博前面的内容都对构造方法__init__进行了介绍,也在前面章节引入了__new__方法,但老猿认为__new__方法比构造方法__init__更应该属于构造方法.这是因为在Py ...

  7. 第8.1节 Python类的构造方法__init__深入剖析:语法释义

    一.    引言 凡是面向对象设计的语言,在类实例化时都有构造方法,很多语言的构造方法名与类名一致,Python中类的构造方法比较特殊,必须是__init__特殊方法. 二.    语法释义 1.   ...

  8. 第8.25节 Python风格的__getattribute__属性访问方法语法释义及使用

    一. 引言 在<第8.13节 Python类中内置方法__repr__详解>老猿介绍了在命令行方式直接输入"对象"就可以调用repr内置函数或__repr__方法查看对 ...

  9. 【转】Python基础语法

    [转]Python基础语法 学习一门编程语言,通常是学习该语言的以下几个部分的内容: 基础语法:如,变量的声明与调用.基本输出语句.代码块语法.注释等: 数据类型:通常都为 数字.字符串.布尔值.数组 ...

  10. python接口测试自动化之python基础语法

    一.pycharm的使用和python基本语法 (一).pycharm的使用和python环境 1.python以及pycharm的安装 python 的版本选择:3.x 版本,不要安装2.x 版本, ...

随机推荐

  1. C语言作业评价标准

    C语言作业评价标准 作业内容: 每周作业分为基础作业.挑战作业和预习作业: 基础作业为本周所学内容的巩固: 挑战作业包括但不仅限于所学知识的综合运用: 预习作业为下周所学内容的任务单,要求必须在课前完 ...

  2. VMware安装CentOS 6.9教程

    CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linu ...

  3. Python第二天: 变量详解及变量赋值

    目录 什么是变量? 怎么写一个好的变量? 下划线命名法及驼峰命名法 结语 目录 此文章针对刚学Python的小白,若觉得对变量有很好的掌握,可以观看其他的文章 在这里, 我说一下我对变量的简单总结: ...

  4. BZOJ4034: [HAOI2015]树上操作

    这题把我写吐了...代码水平还是太弱鸡了啊... 这题就是先给你一些点,以及点权.然后给你一些向边构成一颗树,树的根节点是1. 然后给定三个操作 第一个是把指定节点的权值+W 第二个是把指定节点X为根 ...

  5. 【问题解决方案】下载GitHub里的单个文件

    背景:在不把整个项目弄下来的情况下 步骤:raw --> 右击 --> 链接另存为... 参考:如何用浏览器从 github 上下载某项目中的单个文本文件

  6. Spring Boot的web开发

    web开发的自动配置类:org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration 自动配置的ViewResolver 视图的 ...

  7. HttpPost方式调用接口的3种方式

    第一种:需要httpclient的依赖包 <dependency> <groupId>org.apache.httpcomponents</groupId> < ...

  8. 18.flannel的配置

    Kubernetes网络通信: (1) 容器间通信:同一个Pod内的多个容器间的通信, lo (2) Pod通信:Pod IP <--> Pod IP (3) Pod与Service通信: ...

  9. Announcing the public preview of Azure Dev Spaces

    Today, we are excited to announce the public preview of Azure Dev Spaces, a cloud-native development ...

  10. 返回通知 对方法返回的结果可以进行加工 例如请求接口后 返回的json参数可以加工成对象返回给调用者