python基础知识记录
列表
列表就是python的数组,不过更为强大,列表里可以同时存放不同类型的变量。
增删查改
- 添加元素:list.append() 只能添加一个
- 添加多个元素:list.extend([ , , ]) 向末尾添加多个,实际是使用一个列表来扩充另一个列表
- 插入元素:insert(位置,元素值) 位置支持负数,表示和末尾值得相对距离
- 随机获取一个元素:random.choice(list)
- 从列表中删除元素:remove()、pop()、del。
eggs.remove(“卤蛋”) 删除特定元素,并不需要知道这个元素的具体位置
eggs.pop(1) 将列表中的之低昂元素弹出来,就相当于取出来并删除。
del eggs 直接删除eggs变量
del eggs[0] 删除列表中某个元素
列表切片
list[2:4] 用一个冒号隔开两个索引值,左边是开始位置,右边是结束位置。结束位置上的元素是不包含进来的。
便捷方案:
list=["钢铁侠","蜘蛛侠","蝙蝠侠","绿灯侠","神奇女侠"]
print(list[2:])
print(list[:2])
print(list[:])
>>>
['蝙蝠侠', '绿灯侠', '神奇女侠']
['钢铁侠', '蜘蛛侠']
['钢铁侠', '蜘蛛侠', '蝙蝠侠', '绿灯侠', '神奇女侠']
列表切片不会修改列表自身的组成结构和数据,他为列表创建了一个新的副本并返回。
in 和 not in
只能判断一个层次的成员关系。
old_list=["中国","日本","西班牙","中国","美国","西班牙"]
new_list=[]
for each in old_list:
if each not in new_list:
new_list.append(each)
print(new_list)
>>>>>>
['中国', '日本', '西班牙', '美国']
元组
元组和列表最大的区别就是元组只可读,不可写。创建列表时用中括号,创建元组时用小括号(小括号也可以不要)。
在元素后面加个逗号,就表明是元组了。
tuple1=520
print(type(tuple1))
tuple2=520,
print(type(tuple2))
tuple3=2,5,4,3,7
print(type(tuple3))
>>>>>
<class 'int'>
<class 'tuple'>
<class 'tuple'>
字典
与列表相似,也是可变序列。但与列表不同的是,字典是无序的可变序列。保存的内容是以“键-值对”的形式存放的。
字典的主要特征
- 通过键而不是通过索引来读取。字典就是散列表(hash)
- 字典是任意对象的无序集合。
- 字典是可变的,并且可以任意嵌套。
- 字典中的键必须唯一。
- 字典中的键不可变。
字典的创建
键、值之间用冒号隔开,相邻两个元素用逗号隔开,所有元素放在一对{}中。
dictionary = {‘key1’:‘value1’,‘key2’:‘value2’,…,}
在python中,创建空字典的两种方式
dictionary={}
dictionary=dict()
在python中,通过已有数据快速创建字典的方法
- 通过映射函数创建字典
dictionary = dict(zip(list1,list2))
zip()函数:将多个列表或者元组对应位置的元素组合为元组,并返回包含这些内容的zip对象。
name = ['哈哈','嘻嘻','呵呵','喔喔']
sign = [1,2,3,4]
dictionary = dict(zip(name,sign))
print(dictionary)
{'哈哈': 1, '嘻嘻': 2, '呵呵': 3, '喔喔': 4}
- 通过给定的关键字参数创建字典
dictionary = dict(key1=value1,key2=value2,key3=value3)
- 使用dict对象的fromkeys()方法创建值为空的字典
dictionary = dict.fromkeys(list1)
- 通过已经存在的元组和列表创建字典。
dict1 = {name1: sign1}
字典的删除
- del dictionary
- dictionary.clear()
通过键值访问字典
- print(dictionary[‘键’])
- dictionary.get(key[,default])
遍历字典
dictionary.items()
items()获得的是键-值对的元组列表。
dictionary = {'qq':'88645','ww':'897785','pp':'87978'}
for item in dictionary.items():
print(item)
字符串
字符串和元组一旦确定下来就无法再改变。但可以利用切片和拼接来实现。这并不是真正意义上的修改字符串。原来的字符串其实还在,只不过我们将变量名指向了拼接后的新的字符串。
join用于拼接字符串。
格式化
格式化字符串就是按照统一的规格输出一个字符串。
对字符串拼接的三种方式:
- 简单字符串连接时,直接用+。 full_name=prefix+name
- 复杂,且有格式化需求时,使用格式化操作符。
result=“results is %s:%d”%(name,score) - 大量字符串拼接,尤其发生在循环体内部时,使用字符串的join()方法最方便。 result="".join(iterator)
函数
关键字参数
- 在传入实参时明确指定形参的变量名。其特点就是参数之间不存在先后顺序。出现bug的可能性降低。
收集参数
- 也称可变参数。python就是把标志为收集参数的参数们打包成一个元组。
LEGB原则
- L-Local:函数内的名字空间
- E-Enclosing function locals:嵌套在函数中外部函数的名字空间
- G-Global:函数定义所在模块的名称
- B-Builtin:python内置模块的名字空间
变量的查找顺序依次就是LEGB
闭包
- python中闭包的表现形式定义为:在嵌套函数的环境下,内部函数引用了外部函数的局部变量,那么内部函数就被认为是闭包。
- 闭包的作用主要是避免使用全局变量,这样外部函数就为内部函数构成了一个封闭的环境。
匿名函数
即没有名字的函数。通常情况下,这种函数只使用一次,使用lambda表达式创建匿名函数。
import math
r = 10
result = lambda r:math.pi*r*r
print('半径为',r,'的圆面积为',result(r))
半径为 10 的圆面积为 314.1592653589793
面向对象
- 封装:将对象的属性和行为封装起来,载体是类。
- 继承:继承是重复利用的重要手段,子类通过继承复用了父类的属性和方法的同时又添加子类特有的属性和方法。
- 多态:子类继承父类特性的同时,还具有自己的特征,实现不同的效果,就叫多态。
类
类是具有相同属性和方法的对象的集合。在使用类时,先要定义类,染好再创建类的实例,通过类的实例就可以访问类的属性和方法了。
- 创建__init__()方法
在创造类后,可手动创造一个__init__()方法,这是一个特殊方法,类似于Java的构造方法。每当创建一个类的新实例时,python都会自动执行它。 init()方法包含的第一个参数必须是self参数。self参数是一个指向实例本身的引用,用于访问类中的属性和方法。 - 实例方法
是指在类中定义的方法,该函数是在类的实例上操作的。 - 属性
数据成员指的是在类中定义的变量。又可分为类属性和实例属性。
类属性:类属性是类的所有实例所共享的。可以通过类名直接访问,也可以动态的为类和对象添加属性。
实例属性:定义在类的方法中的属性,只作用于当前实例中。实例属性也可以修改,修改之后并不影响该类的另一个实例中相应的实例属性的值。 - 访问限制
(1)收尾双下划线表示定义特殊方法,一般是系统定义名字。init()
(2)双下划线表示private(私有)类型的成员。
私有属性不能直接通过实例名+属性名访问,可以在类的实例方法中访问,也可以通过“实例名._类名__XXX”方式访问。
属性(property)
- 在python中,通过@property(装饰器)来将一个方法转化成一个属性,从而实现用于计算的属性。将方法转化为属性之后,可以直接同过方法名来访问方法,不需要再添加一对小括号“()”,使代码更简洁。
- @property可以实现只读属性。
继承
通过继承不仅可以实现代码的重用,还可以通过继承来理顺类与类之间的关系。在python中,可以在类的定义语句中,类的右侧使用一对小括号将要继承的类名称括起来,从而实现类的继承。
- 方法重写
基类的成员都会被派生类继承,当基类中的某个方法不完全适用于派生类是,就需要在派生类中重写父类的这个方法。