输入输出

  • str() 函数人类可读,repr() 解释器可读
  • rjust() 靠右,ljust() 靠左,center() 居中。zfill() 填0。

名字空间

  • 名字到对象的映射关系被称为名字空间。
  • 名字空间采用字典来实现。
  • 不同名字空间中相同的名字各不相关。
  • 存在以下名字空间(按照搜索顺序):
    • 最内层函数的局部名字
    • 外层函数的非全局非局部名字
    • 模块的全局名字
    • 语言的内置名字
def scope_test():
def do_local():
spam = "local spam" def do_nonlocal():
nonlocal spam
spam = "nonlocal spam" def do_global():
global spam
spam = "global spam" spam = "test spam"
do_local()
print("After local assignment:", spam)
do_nonlocal()
print("After nonlocal assignment:", spam)
do_global()
print("After global assignment:", spam) scope_test()
print("In global scope:", spam)
After local assignment: test spam
After nonlocal assignment: nonlocal spam
After global assignment: nonlocal spam
In global scope: global spam

类(Classes)

  • 类的成员缺省为public,方法在子类中均可覆盖(重写)。
  • 类名自身是一个对象。
  • 类的方法的第一个参数通常是指向类实例自身的 self 参数。
  • 方法名本身是一个对象。
  • 存在类变量和实例变量。
  • 至少两个下划线打头的变量为private变量。
  • 内置类型也可以作为基类。
  • 存在多重继承。
>>> class MyClass:
"""A simple example class"""
i = 12345 def __init__(self):
self.data = [] def f(self):
return 'hello world' >>> MyClass.i
12345
>>> MyClass.f(None)
'hello world'
>>> MyClass.__doc__
'A simple example class'
>>> x = MyClass()
>>> x.i
12345
>>> x.f()
'hello world'
>>> xf = x.f
>>> print(xf())
hello world
>>> class Complex:
def __init__(self, realpart, imagpart):
self.r = realpart
self.i = imagpart >>> x = Complex(3.0, -4.5)
>>> x.r, x.i
(3.0, -4.5)

数据属性(data attributes)和方法(methods)

  • 类成员包括数据属性和方法。

    上面的例子中

    MyClass 是类,MyClass.i 是类对象的数据属性,MyClass.f 是函数对象(function object)。

    x 是类的实例,x.data 是实例的数据属性,x.f 是方法对象(method object)。
  • 方法的第一个(隐藏)参数是类的实例对象。

    x.f() 实际相当于 f(x)。
  • 实例对象的属性和方法为实例对象所有,而类对象的属性何方法为类的所有实例对象所共有。
>>> class Dog:

    kind = 'canine'         # class variable shared by all instances

    def __init__(self, name):
self.name = name # instance variable unique to each instance >>> d = Dog('Fido')
>>> e = Dog('Buddy')
>>> d.kind # shared by all dogs
'canine'
>>> e.kind # shared by all dogs
'canine'
>>> d.name # unique to d
'Fido'
>>> e.name # unique to e
'Buddy'
>>> class Dog: def __init__(self, name):
self.name = name
self.tricks = [] # creates a new empty list for each dog def add_trick(self, trick):
self.tricks.append(trick) >>> d = Dog('Fido')
>>> e = Dog('Buddy')
>>> d.add_trick('roll over')
>>> e.add_trick('play dead')
>>> d.tricks
['roll over']
>>> e.tricks
['play dead']
  • 属性名和方法名冲突时,属性名优先。
  • 实例对象可以在类之外添加自己独有的属性。
  • 方法可以在类之外定义。
# Function defined outside the class
def f1(self, x, y):
return min(x, x+y) class C:
f = f1 def g(self):
return 'hello world' h = g
  • 方法可以调用其他方法。
class Bag:
def __init__(self):
self.data = [] def add(self, x):
self.data.append(x) def addtwice(self, x):
self.add(x)
self.add(x)
  • 实例对象可以引用自己的类对象 object.class
  • 空的类定义可以用来模拟其他语言中的记录和结构。
class Employee:
pass john = Employee() # Create an empty employee record # Fill the fields of the record
john.name = 'John Doe'
john.dept = 'computer lab'
john.salary = 1000

继承

  • 继承的语法为 class DerivedClassName(modname.BaseClassName):
  • 基类中的方法可以在子类中被覆盖(重写)。
  • 子类可以通过BaseClassName.methodname(self, arguments)调用基类中的(同名)方法。
  • isinstance() 检查是否类的实例

    如果 obj 是 int 类型或其子类的实例的话,那么 isinstance(obj, int) == True 成立。
  • issubclass() 检查是否类的子类

    issubclass(bool, int) == True

    issubclass(float, int) == False
  • 多重继承的语法为class DerivedClassName(Base1, Base2, Base3):

迭代器

迭代器用例

>>> for element in [1, 2, 3]:
print(element) 1
2
3
>>> for element in (1, 2, 3):
print(element) 1
2
3
>>> for key in {'one':1, 'two':2}:
print(key) one
two
>>> for char in "123":
print(char) 1
2
3
>>> for line in open("myfile.txt"):
print(line, end='')
  • for 循环能够迭代容器 container,是因为容器 container 实现了迭代器的接口。
  • for 循环首先调用 iter(container) 得到迭代器对象 iterator。
  • for 循环反复调用 next(iterator) 得到容器 container 中的元素。
  • 当容器中的元素被迭代完毕时,next(iterator) 抛出 StopIteration 异常,for 循环终止。

迭代器细节

>>> s = 'abc'
>>> it = iter(s)
>>> it
<str_iterator object at 0x02C95530>
>>> next(it)
'a'
>>> next(it)
'b'
>>> next(it)
'c'
>>> next(it)
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
next(it)
StopIteration
  • iter(container) 调用 container 的 _iter_ 方法。

    该方法返回 iterator 对象。
  • next(iterator) 调用 iterator 的 _next_ 方法。

    该方法返回下一个元素或者抛出 StopIteration 异常。
  • 通常 container 和 iterator 是同一个对象。

迭代器示例

>>> class Reverse:
"""Iterator for looping over a sequence backwards."""
def __init__(self, data):
self.data = data
self.index = len(data) def __iter__(self):
return self def __next__(self):
if self.index == 0:
raise StopIteration
self.index = self.index - 1
return self.data[self.index] >>> rev = Reverse('spam')
>>> iter(rev)
<__main__.Reverse object at 0x02C95670>
>>> for char in rev:
print(char) m
a
p
s

生成器

生成器函数使用 yield 自动实现迭代器接口。

>>> def reverse(data):
for index in range(len(data)-1, -1, -1):
yield data[index] >>> for char in reverse('golf'):
print(char) f
l
o
g

生成器表达式

生成器表达式使用小括号加解析表达式自动生成迭代器接口。

>>> sum(i*i for i in range(10))                 # sum of squares
285 >>> xvec = [10, 20, 30]
>>> yvec = [7, 5, 3]
>>> sum(x*y for x,y in zip(xvec, yvec)) # dot product
260 >>> from math import pi, sin
>>> sine_table = {x: sin(x*pi/180) for x in range(0, 91)} >>> unique_words = set(word for line in page for word in line.split()) >>> valedictorian = max((student.gpa, student.name) for student in graduates) >>> data = 'golf'
>>> list(data[i] for i in range(len(data)-1, -1, -1))
['f', 'l', 'o', 'g']

Python 3 学习笔记(2)的更多相关文章

  1. 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL

    周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...

  2. Python Click 学习笔记(转)

    原文链接:Python Click 学习笔记 Click 是 Flask 的团队 pallets 开发的优秀开源项目,它为命令行工具的开发封装了大量方法,使开发者只需要专注于功能实现.恰好我最近在开发 ...

  3. 0003.5-20180422-自动化第四章-python基础学习笔记--脚本

    0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...

  4. Python Flask学习笔记之模板

    Python Flask学习笔记之模板 Jinja2模板引擎 默认情况下,Flask在程序文件夹中的templates子文件夹中寻找模板.Flask提供的render_template函数把Jinja ...

  5. Python Flask学习笔记之Hello World

    Python Flask学习笔记之Hello World 安装virtualenv,配置Flask开发环境 virtualenv 虚拟环境是Python解释器的一个私有副本,在这个环境中可以安装私有包 ...

  6. 获取字段唯一值工具- -ArcPy和Python案例学习笔记

    获取字段唯一值工具- -ArcPy和Python案例学习笔记   目的:获取某一字段的唯一值,可以作为工具使用,也可以作为函数调用 联系方式:谢老师,135-4855-4328,xiexiaokui# ...

  7. Python高级学习笔记

    Python高级学习笔记,此笔记中包含Linux操作系统.Html+CSS+JS.网络协议等. 所有思维导图为本人亲手所画,请勿用于商用. 大哥们,求点赞哦. 第一天笔记:链接 第二天笔记:链接 第三 ...

  8. Python入门学习笔记4:他人的博客及他人的学习思路

    看其他人的学习笔记,可以保证自己不走弯路.并且一举两得,即学知识又学方法! 廖雪峰:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958 ...

  9. Python 基础学习笔记(超详细版)

    1.变量 python中变量很简单,不需要指定数据类型,直接使用等号定义就好.python变量里面存的是内存地址,也就是这个值存在内存里面的哪个地方,如果再把这个变量赋值给另一个变量,新的变量通过之前 ...

  10. Python人工智能学习笔记

    Python教程 Python 教程 Python 简介 Python 环境搭建 Python 中文编码 Python 基础语法 Python 变量类型 Python 运算符 Python 条件语句 ...

随机推荐

  1. RESTful 接口设计规范

    get 用来获取,post 用来新建(也可以用于更新),put 用来更新,delete 用来删除.

  2. mysql 事务隔离级别详解

    事物的 隔离级别,说简单非常简单(新手也能说出 是个隔离级别 和 影响),说男也非常难.(很多 有几年编程 经验的程序员依旧搞不清楚) 废话不多少 直接开始: 事务的隔离级别 是用来描述 事务的读关系 ...

  3. GPU驱动兼容性问题

    GPU驱动兼容性问题 问题描述: 将笔记本的GTX860M 的驱动升级到了376.09版本,出现登陆界面,输入密码后黑屏. 解决思路: 由于正常显示登陆窗口,且可以输入密码,基本排除硬件问题和集成显卡 ...

  4. 使用纯生js操作cookie

    前段时间做项目的时候要使用js操作cookie,jquery也有相应的插件,不过还是觉得纯生的js比较好,毕竟不依赖jq. //获得coolie 的值 function cookie(name) { ...

  5. Android之WebViewClient与WebChromeClient的区别

    Android之WebViewClient与WebChromeClient的区别 2012-05-05      0个评论       收藏    我要投稿 ANDROID应用开发的时候可能会用到WE ...

  6. bzoj 3413: 匹配

    Description Input 第一行包含一个整数n(≤100000). 第二行是长度为n的由0到9组成的字符串. 第三行是一个整数m. 接下来m≤5·10^4行,第i行是一个由0到9组成的字符串 ...

  7. 为MyEclipse配置Spring的约束

    1.Spring框架概述 Spring是一个Service层的框架,可以整合许多其它框架进行工作 Spring的主要技术是 IOC(DI) AOP IOC - 控制反转(依赖注入) AOP - 免息那 ...

  8. webservice框架jersey 文章

    webservice框架jersey简单总结 Jersey系列文章: Jersey框架一:Jersey RESTful WebService框架简介 Jersey框架二:Jersey对JSON的支持 ...

  9. python3 钉钉群机器人 webhook

    import requests import json url='https://oapi.dingtalk.com/robot/send?access_token=替换成你自己的toten' pro ...

  10. fiddler script建议教程

    http://www.fiddlerbook.com/Fiddler/dev/ScriptSamples.asp