9.2 访问控制和属性装饰器
访问控制
私有(Private) 成员
在 Python 中,在类变量或实例变量前使用两个下划线的变量,称为私有成员,包括私有属性、私有方法。
class Person:
def __init__(self, name, age=18):
self.a = '1'
self.__name = name
self.__age = age
def __showage(self):
print(self.__age)
print(Person.__name) # 都不可以调用
print(Person.__showage)
tom = Person('tom')
print(tom.__name)
print(tom.__showage)
4.3 作用域
一个标识符的可见范围,这就是标识符的作用域。一般常说的是变量的作用域
def foo():
x = 100
print(x) # 可以访问到吗
2.3.3 字节序列
Python3 引入两个新的类型 bytes、bytearray。
bytes 不可变字节序列;bytearray 是可变字节数组。
编码与解码
- 编码:str => bytes,将字符串这个字符序列使用指定字符集encode编码为一个个字节组成的序列bytes
- 解码:bytes 或 bytearray => str,将一个个字节按照某种指定的字符集解码为一个个字符串组成的字符串
print("abc".encode()) # 缺省为utf-8编码
print("啊".encode())
print("啊".encode('utf-8'))
print("啊".encode('gbk'))
print(b'abc'.decode('utf8'))
print(b'\xb0\xa1'.decode('gbk'))
print(b'\xe5\x95\x8a'.decode())
1.2 Python 代码规范
转载自:草根学 Python | TwoWater
简明概述
代码格式
缩进
- 统一使用 4 个空格进行缩进
行宽
每行代码尽量不超过 80 个字符(在特殊情况下可以略微超过 80 ,但最长不得超过 120)
理由:
- 这在查看 side-by-side 的 diff 时很有帮助
- 方便在控制台下查看代码
- 太长可能是设计有缺陷
1.1 初识Python
转载自:Python - 100天从新手到大师 | 骆昊
Python简介
Python的历史
- 1989年圣诞节:Guido von Rossum开始写Python语言的编译器。
- 1991年2月:第一个Python编译器(同时也是解释器)诞生,它是用C语言实现的(后面),可以调用C语言的库函数。在最早的版本中,Python已经提供了对“类”,“函数”,“异常处理”等构造块的支持,还有对列表、字典等核心数据类型,同时支持以模块为基础来构造应用程序。
- 1994年1月:Python 1.0正式发布。
- 2000年10月16日:Python 2.0发布,增加了完整的垃圾回收,提供了对Unicode的支持。与此同时,Python的整个开发过程更加透明,社区对开发进度的影响逐渐扩大,生态圈开始慢慢形成。
- 2008年12月3日:Python 3.0发布,它并不完全兼容之前的Python代码,不过因为目前还有不少公司在项目和运维中使用Python 2.x版本,所以Python 3.x的很多新特性后来也被移植到Python 2.6/2.7版本中。
5 函数式编程
函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。函数就是面向过程的程序设计的基本单元。
而函数式编程(请注意多了一个“式”字)——Functional Programming,虽然也可以归结到面向过程的程序设计,但其思想更接近数学计算。
我们首先要搞明白计算机(Computer)和计算(Compute)的概念。
在计算机的层次上,CPU执行的是加减乘除的指令代码,以及各种条件判断和跳转指令,所以,汇编语言是最贴近计算机的语言。
4.2 函数参数
函数在定义是要定义好形式参数,调用时也提供足够的实际参数,一般来说,形参和实参个数要一致(可变参数除外)。
实参传参方式
1、位置传参
定义时def f(x, y, z), 调用使用 f(1, 3, 5),按照参数定义顺序传入实参
2、关键字传参
定义时def f(x, y, z),调用使用 f(x=1, y=3, z=5),使用形参的名字来传入实参的方式,如果使用了形参名字,那么传参顺序就可和定义顺序不同
要求位置参数必须在关键字参数之前传入,位置参数是按位置对应的
5.1 高阶函数
一等共民
- 函数在Python是一等公民(First-Class Object)
- 函数也是对象,是可调用对象
- 函数可以作为普通变量,也可以作为函数的参数、返回值
高级函数
高阶函数(High-order Function)
- 数学概念 y = f(g(x))
- 在数学和计算机科学中,高阶函数应当是至少满足下面一个条件的函数
- 接受一个或多个函数作为参数
- 输出一个函数
5.3 匿名函数
Python 中,匿名函数也叫 lambda 表达式。
匿名:隐藏名字,即没有名称
匿名函数:没有名字的函数。
函数没有名字该如何定义?函数没有名字如何调用?
Lambda 表达式
Python中,使用 Lambda 表达式构建匿名函数。
def foo(x):
return x ** 2
lambda x: x ** 2 # 定义
a = (lambda x: x ** 2)(4) # 调用
print(a)
foo = lambda x,y: (x+y) ** 2 # 定义函数
print(foo(1, 2))
# 等价于
def foo(x,y):
return (x+y) ** 2