Python01基础

Python基础

Hello World!

1.命令行操作

image-20220609183800187

2.py文件运行

image-20220609183903255

3.脚本文件执行

1
2
#! python_path
# 标注解释器位置

image-20220609184141962

基本数据类型

赋值

image-20220609184423148

常用数据类型

变量 数据类型
a=10 int 整数
a=1.3 float 浮点数
a=True 真值(True/False)
a=’Hello!’ 字符串

序列

sequence(序列)是一组有序元素集合 , 序列可以包含一个或多个元素,也可以没有任何元素。

序列有两种:tuple(定值表; 也有翻译为元组) 和 list (列表), tuple和list的主要区别在于,一旦建立,tuple的各个元素不可再变更,而list的各个元素可以再变更

image-20220609184939891

索引

序列元素的下标从0开始

切片

获取序列的一部分数据, 范围引用: 基本样式 [下限:上限:步长]

image-20220609185520375

字符串

字符串是 python 比较常见的数据类型。也可以使用索引,切片等操作。元组和字符串都属于 python 中的不可变对象

image-20220609185741894

运算符

算术运算符 关系运算符 逻辑运算符
+ 加法 == 等于 and 逻辑与
- 减法 != 不等于 or 逻辑或
* 乘法 > 大于 not 逻辑非
/ 除法 < 小于
% 取余 >= 大于等于
** 乘方 <= 小于等于
in 属于

关键字

通过print(help('keywords'))查看

False class from or
None continue global pass
True def if raise
and del import return
as elif in try
assert else is while
async except lambda with
await finally nonlocal yield
break for not

缩进和选择

Python最具特色的是用缩进来标明成块的代码。以if选择结构来举例。if后面跟随条件,如果条件成立,则执行归属于 if 的一个代码块。

image-20220609190359751

循环

for循环

for循环需要预先设定好循环的次数(n),然后执行隶属于for的语句n次。

1
2
for 元素 in 序列: 
statement

image-20220609190708670

range()函数快速建立表

image-20220609190930956

while循环

while会不停地循环执行隶属于它的语句,直到条件为假(False)。

1
2
while 条件:
statement

image-20220609191201862

中断循环

  • continue 在循环的某一次执行中,如果遇到continue, 那么跳过这一次执行,进行下一次的循环操作
  • break 停止执行整个循环

函数

函数的定义

image-20220609191405710

1
2
3
4
5
6
7
8
9
10
11
12
13
14
这个函数的功能是求两个数的平方和。
首先,def,这个关键字通知python:定义一个函数。s_sum是函数名。
括号中的a, b是函数的参数,是对函数的输入。参数可以有多个,也可以完全没有(但括号要保留)。

冒号和缩进来表示的隶属关系。
result = a**2 + b**2 # 这一句是函数内部进行的运算
return c # 返回c的值,也就是输出的功能。Python的函数允许不使用return。
return 可以返回多个值,以逗号分隔。相当于返回一个tuple(元组)。
return a,b,c # 相当于 return (a,b,c)
在python中#代表注释,编译器将跳过#后的内容。

当程序执行到return的时候,程序将停止执行函数内余下的语句。
return并不是必须的,当没有return, 或者return后面没有返回值时,函数将自动返回None。
None是Python中的一个特别的数据类型,用来表示什么都没有, 多用于关键字参数传递的默认值。

函数调用和参数传递

image-20220609191919934

1
2
3
4
5
6
7
第一个例子,将一个整数变量传递给函数,函数对它进行操作,但原整数变量a不发生变化。

第二个例子,将一个列表传递给函数,函数进行操作,原来的列表 b 发生变化。

对于基本数据类型的变量,变量传递给函数后,函数会在内存中复制一个新的变量,从而不影响原来的变量。(我们称此为值传递)

但是对于列表来说,表传递给函数的是一个指针,指针指向序列在内存中的位置,在函数中对列表的操作将在原有内存中进行,从而影响原有变量。 (我们称此为指针传递,python 中也称为 引用传递)

面向对象的基本概念

Python使用类(class)和对象(object),进行面向对象(object-oriented programming,简称OOP)的编程。

类 Class

Python使用class关键字定义一个类

image-20220609192349301

方法 method

Python中通过在类的内部定义函数,来说明方法。

image-20220609192527039

参数中有一个self,它是为了方便我们引用对象自身。方法的第一个参数必须是self,无论是否用到

子类

在OOP中,我们通过继承(inheritance)生成子类

image-20220609192810913

子类Chicken将享有父类Bird的所有属性。

面向对象的进一步拓展

调用类的其它信息

在定义方法时,必须有self这一参数。这个参数表示某个对象。对象拥有类的所有性质,那么我们可以通过self,调用类属性。

image-20220609193052996

1
2
3
4
注意: 
在对象中对类属性进行赋值的时候,实际上会在对象定义的作用域中添加一个属性(如果还不存在的话),并不会影响到相应类中定义的同名类属性。

但如果是修改类属性的内容(比如类属性是个字典,修改字典内容)时会影响到所有对象实例,因为这个类属性的内容是共享的。

__init__() 方法

Python有一些特殊方法。Python会特殊的对待它们。特殊方法的特点是名字前后有两个下划线

如果你在类中定义了__init__() 这个方法,创建实例对象后,Python会自动调用这个方法。这个过程也叫初始化

image-20220609193556409

对象的性质

在一些情况下,我们定义对象的性质,用于记录该对象的特别信息。比如说,人这个类。性别是某个人的一个性质,不是所有的人类都是男,或者都是女。这个性质的值随着对象的不同而不同

当定义类的方法时,必须要传递一个self的参数。这个参数指代的就是类的一个对象。我们可以通过操纵self,来修改某个对象的性质。在方法内部,可以通过引用self.attribute,查询或修改对象的性质。

这样,在类属性的之外,又给每个对象增添了各自特色的性质

image-20220609193821702

Everything is Object

查看Python类信息, 可以通过两个内置函数:dir()help()

1
2
dir()用来查询一个类或者对象所有属性和方法
help()用来查询说明文档

查看list类的内置属性方法及说明文档

image-20220609194051926

image-20220609194130879

list是一个类

实际上,list是一个类。每个列表都属于该类。l1是类list的一个对象。

image-20220609194439202

运算符是特殊方法

使用dir(list)的时候,能看到一个属性,是__add__(), 这个方法定义了”+”运算符对于list对象的意义,两个list的对象相加时,会进行的操作。

运算符,比如+, -, >, <, 以及下标引用[start:end]等等,从根本上都是定义在类内部的方法

image-20220609194829990

错误信息,说明该运算符“-”没有定义。现在我们继承list类,添加对”-“的定义:

image-20220609194927967

1
2
3
4
5
内置函数len()用来返回list所包含的元素的总数。

内置函数__sub__() 定义了“-”的操作:从第一个表中去掉第二个表中出现的元素。

如果__sub__() 已经在父类中定义,你又在子类中定义了,那么子类的对象会参考子类的定义,而不会载入父类的定义。任何其他的属性也是这样。