输入输出

  • 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. HTMLCanvasElement.toBlob() 兼容性及使用

    toBlob 兼容性: 在最新版chrome和firefox中能正常使用,在Safari中报错:没有这个函数 规避方法: 不使用toBlob,使用toDataURL()将file转成base64编码, ...

  2. bzoj 3674 可持久化并查集加强版——可持久化并查集

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3674 用主席树维护 fa[ ]  和 siz[ ] .改 fa[ ] 和改 siz[ ] 都 ...

  3. ML(4.3): R Random Forest

    随机森林模型是一种数据挖掘模型,常用于进行分类预测.随机森林模型包含多个树形分类器,预测结果由多个分类器投票得出. 决策树相当于一个大师,通过自己在数据集中学到的知识对于新的数据进行分类.俗话说得好, ...

  4. 在doc下面执行zpl语言 Copy 文件名 lpt1

    在doc下面执行zpl语言 Copy 文件名 lpt1 测试斑马条码打印机并口是否能正常通讯: 1.Zebra打印机安装好标签和碳带,且打印机进入Ready状态.2.电脑端用Notepad编写输入如下 ...

  5. jq 获取name值一样的数组

    <input type="text" value="" name="wid"/><input type="tex ...

  6. HA 部署wordpress

    前提: 1.保证免密认证ssh 2.NTP时间是否同步: 3.保证防火墙,selinux关闭: 4.用户名互相能够解析:在hosts文件设置: 环境: 系统:centos6.8和centos7.2 I ...

  7. bzoj 2516: 电梯

    Description Input Output 状压dp,状态表示为表示当前在第x层,电梯内有哪些人,哪些人还没到终点 #include<cstdio> #include<cstr ...

  8. k8s1.4.3安装实践记录(1)-etcd、docker、flannel安装配置

    虚拟机:VMware® Workstation 12 Pro 系统:CentOS Linux release 7.2.1511 (Core) 3.10.0-327.el7.x86_64 由于刚开始学习 ...

  9. Excel 公式CORREL算出相关系数

    当对 N 个主体中的每一个变量进行观测时,CORREL 工作表函数可计算两个测量变量之间的相关系数.(缺少任何主体的观测值将导致该主体在分析中被忽略.)当 N 个主体中的每一个均具备两个以上的测量变量 ...

  10. onload属性使用方法

    onload事件属性是页面的图片文字等全部加载完毕后执行的事件 window.onload=fun1;function fun1(){    document.getElementsByTagName ...