python快速入门读书笔记

本文介绍了Python的基础,包括类的定义、面向对象概念、类变量、静态方法和类方法,以及私有变量的访问。还讨论了函数的参数传递、变长参数、lambda表达式和装饰器。同时提到了列表推导式和Python的数据类型作为对象的概念。

python快速入门

书名python快速入门
作者Naomi Ceder
状态阅读中 标签 阅读中
简介介绍python基础语法、内置数据结构、异常处理、面向对象知识、标准库常用函数、一些常用工具如正则表达式等内容

思维导图

待定

面向对象与类

  1. 概述:定义类、实例变量、方法、类变量、静态方法和类方法、继承、私有变量和私有方法(@property)、类实例的作用域规则和命名空间、多重继承
  2. 类变量可以直接用类来调用(使用场景举例:在实例创建时候进而调用类变量)
  3. 静态方法和类方法(类方法和静态方法很像,但是类方法将所属类作为第一个参数进行调用,更为方便)
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
  1. 私有变量和私有方法

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)
  1. 内置命名空间 > 模块命名空间 > 类命名空间 > 方法命名空间
  2. 多重继承

函数

  1. 概述:实参与形参、可变对象的参数传递、变长实参、将函数赋给变量(用起来和函数完全相同)、lambda表达式、局部变量/非局部变量/全局变量、生成器函数(yield)、装饰器、列表推导式
  2. 实参:定义好的变量 / 形参:函数的参数 => 将实参传给形参

注意在传参时如果对可变对象进行参数传递,那么可能将会在函数的内部对该对象进行改变,也就是对象引用地址的传递

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
  1. 变长实参(关键字参数):***
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)
  1. lambda表达式:lambda parameter1,pararneter2,… : expression

使用场景:小型函数定义传递

a = ["1","666666","4444"]
a.sort(key=lambda x: len(x))
a  # ['1', '4444', '666666']
  1. 生成器(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
  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()}

数据类型即对象

相关资料

  1. python标准库
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值