python快速入门
| 书名 | python快速入门 |
|---|---|
| 作者 | Naomi Ceder |
| 状态 | 阅读中 标签 阅读中 |
| 简介 | 介绍python基础语法、内置数据结构、异常处理、面向对象知识、标准库常用函数、一些常用工具如正则表达式等内容 |
思维导图
待定
面向对象与类
- 概述:定义类、实例变量、方法、类变量、静态方法和类方法、继承、私有变量和私有方法(@property)、类实例的作用域规则和命名空间、多重继承
- 类变量可以直接用类来调用(使用场景举例:在实例创建时候进而调用类变量)
- 静态方法和类方法(类方法和静态方法很像,但是类方法将所属类作为第一个参数进行调用,更为方便)
class TheArea:
# 类变量
enlarge_area = 1
all_instances = []
def __init__(self, x, y):
# 2.这里对类变量进行调用
self.x = x
self.y = y
# 也可以TheArea.all_instances.append(self)
self.__class__.all_instances.append(self)
@classmethod
def get_total_area(cls):
area = 0
for item in cls.all_instances:
# 3. item实例的x和y
area += cls.get_area(item.x, item.y)
@staticmethod
def get_area(x, y)
# 这里直接由类方法进行调用[实际上也可以用实例来调用的]
return TheArea.enlarge_area * x * y
- 私有变量和私有方法
a. 按照规范:
_xxx定义为私有变量(可强制访问)
b. 按照python规定:__xxx强制转化为私有变量(但是还是可以进行__对象__.__xxx来访问)
c. 使用@property可以将属性强制转化为私有变量【如果未设置getter将只是只读】,不过此时就失去了python本身实例变量的易用性
【注:为什么要有getter和setter,如果没有这种方法,那么实例变量的访问和修改就没有限制,比如定义一个age实例变量,那么年龄是不能小于0的,此时实例变量没办法进行限制,那么就可以使用setter来进行限制】
class TheArea:
def __init__(self):
self._temp = 0
# 这里定义方法名一般和属性一样即可
@property
def temp(self):
# 可以进行一些操作[如果只是单纯get实例变量就不需要操作]
return self._temp
# 传入参数【只能传入一个参数,如果有多个参数,需要传入元组进行解包】
@temp.setter
def temp(self, dimension):
x, y, z = dimension
return self._temp * x * y * z
# 调用该方法
ar = TheArea()
# 但是使用起来和实例变量一样
# 这里调用了被@property函数装饰的temp
print(ar.temp)
# 如果这里没有setter将无法修改
ar.temp = 50, 44, 44
print(ar.temp)
- 内置命名空间 > 模块命名空间 > 类命名空间 > 方法命名空间
- 多重继承
函数
- 概述:实参与形参、可变对象的参数传递、变长实参、将函数赋给变量(用起来和函数完全相同)、lambda表达式、局部变量/非局部变量/全局变量、生成器函数(yield)、装饰器、列表推导式
- 实参:定义好的变量 / 形参:函数的参数 => 将实参传给形参
注意在传参时如果对可变对象进行参数传递,那么可能将会在函数的内部对该对象进行改变,也就是对象引用地址的传递
def test(the_list, the_num):
the_list.append(5)
the_num = 4
# 使用该函数
the_list = [1,2,3], the_num = 5
test(the_list, the_num)
# the_list此时为[1,2,3,5], the_num还是为5
# 修正
def test(the_list, the_num):
# copy原来的list到新的list上面
the_list = the_list.copy()
the_list.append(5)
the_num = 4
- 变长实参(关键字参数):
*和**
def one_star(*other):
# 此时的other将合并为一个元组
print(other[:2])
one_star(1,3,4,5,6) # 输出(1,3)
def two_star(**other):
# 此时的other将转化为一个dict
print(other) # {'arg1': 1, 'arg2': 2, 'arg3': 3}
for key, value in other.items():
print(key, value)
# 不能传递two_star({"arg1": 1,"arg2": 2,"arg3": 3}) 这种是位置参数并非关键字参数
two_star(arg1=1, arg2=2, arg3=3)
- lambda表达式:
lambda parameter1,pararneter2,… : expression
使用场景:小型函数定义传递
a = ["1","666666","4444"]
a.sort(key=lambda x: len(x))
a # ['1', '4444', '666666']
- 生成器(yield/yield from)
a. 每次
yield xxx都会返回xxx的值
b.yield from:将当前生成器委托给子生成器【将yield表达式移出主生成器,方便重构】
def subgen(x):
for i in range(x):
yield i
def gen(y):
yield from subgem(y)
for q in gen(3):
print(q) # 0 1 2
- 装饰器:
使用@装饰 - 列表推导式
# list comprehension
lst_str = [str(i) for i in lst_num]
releases = [f'{l}_v{v}' for l in languages for v in versions]
# Dictionary Comprehension
char_dict_reversed = {val:key for key, val in char_dict.items()}
# Set Comprehension
char_set = set()
char_set = {char for key, char in char_dict.items()}
本文介绍了Python的基础,包括类的定义、面向对象概念、类变量、静态方法和类方法,以及私有变量的访问。还讨论了函数的参数传递、变长参数、lambda表达式和装饰器。同时提到了列表推导式和Python的数据类型作为对象的概念。

被折叠的 条评论
为什么被折叠?



