1. 定义
def 函数名(参数):
函数体
例如
def hello():
print("hello,world")
这就是定义了一个hello这样的函数,输出hello,world这一条语句,这就是一个最简单的自定义的一个函数。
2. 调用
.函数名()
例如
s.hello()
这就是调用了hello这个函数
3. 参数传递
- 不可变的类型:比如一个变量a,函数f(a),传递参数的时候就是传递了a的值,不会影响a这个对象本身,相当于只是修改了复制过来的一个对象,不会修改a本身。
- 可变的类型:比如有一个列表l,函数f(l),就是把这个列表传过去,如果修改的话,这个列表l本身也会被修改。
4. 参数类型
- 必须参数:这个参数必须要以正确的顺序传入函数,在调用的时候他的数量必须要和声明的时候是一样的。
- 关键字参数:函数调用可以使用关键字参数来确定传入的参数值。允许顺序可以和声明的时候不一样。
- 默认参数:没有传参的话就是以默认的参数来传
5. 模块
当我们定义了一些东西,是由解释器来进行编译的。比如说我定义一些方法或者定义一些变量,当我退出之后,再进入这个解释器,那我前面定义的东西就都没有了,这样来来回回写非常麻烦,于是我们就有了模块。将一些比较常用的一些方法或者变量之类的放在这个模块中,通过对这个模块的调用就可以直接的去使用这些方法或是变量等等了,不需要再重新定义了
- 调用一个模块
import 模块 - 调用多个模块
import 模块1,模块2 - 调用模块里面指定的某一个函数或者某一个命名空间等等
from 模块 import 命名空间 - 调用模块里面所有的内容
from 模块 import *
6. 输入输出
- 输入
input - 输出
-
print
-
str()
返回用户比较容易读的形式 -
repr()
返回解释器比较容易读的形式>>> s='hello' >>> str(s) 'hello' >>> repr(s) "'hello'" >>> print(s) hello
-
7. 对文件进行操作
- 参数
参数 | 含义 |
---|---|
t | 文本模式-默认 |
x | 写模式-新建文件,如果文件已经存在会报错 |
+ | 打开一个文件进行更新 |
r | 只读 |
w | 写入 |
r+ | 读写 |
w+ | 从头读写-原有内容删除,如果没有文件会新建 |
a | 追加-如果文件已经存在的话,就会把文件的指针放在结尾。也就是说新的内容是会写在原有的内容之后的,如果这个文件不存在的话,就新建一个文件进行写入 |
a+ | 追加读写-如果文件存在,指针也是放在结尾,如果不存在就新建一个文件,用于读和写 |
b | 二进制的模式-如果在前面这些参数后面加了b,就代表用二进制的模式去打开它做读写操作 |
- 函数调用
函数 | 含义 |
---|---|
file.open() | 打开文件 |
file.close() | 关闭文件-关闭之后就不能再进行读和写了 |
file.flush() | 刷新文件内部缓冲-会把内部文件中缓冲区里的数据立即写到这个文件里面,而不是被动的等待,等待他从缓冲区写出来 |
file.read([size]) | 读-可以指定大小,就是在文件当中读取多大的内容,比如字节数之类的 |
file.readline() | 读一行 |
file.readlines() | 读所有行 |
file.write() | 写 |
file.close() | 关闭 |
8. 类
8.1 概念
- 方法:用来描述对象所具有的行为
- 类变量:类所有实例化对象共有的变量
- 局部变量:定义在方法里面的变量
- 实例变量:在类声明的时候属性是由变量来表示的
- 继承:用一个派生类承接父类,实际上就是分一个父类和子类,子类继承父类
8.2 创建类
class 类名:
def 方法名
在类里面定义方法就是用def,实际上也是创建一个函数
8.3 继承
class A:
def
class B(A):
A为父类,B为子类
-
多继承:
class B(A,C,D):
-
方法重写:
如果父类的方法不太能满足需求,可以在子类中重写父类的方法class A: def method(self): print('') class B(A): def method(self): print('')
父类当中有method这个方法,正常情况下子类继承的时候就不需要再写一个方法了,但如果对父类这个方法不满意,就可以重写一下方法
c=B() 子类实例,定义一个实例c为子类
c.method() 调用重写的方法,调用的就是子类当中重写的方法
在类里面需要注意,类的方法中必须要有一self这个参数,且必须是第一个,如果有别的参数可以在后面加,比如(self,a,b),但是第一个必须是self。
8.4 类的属性
对象 | 属性 |
---|---|
example | 前后无下划线表示该变量、函数、成员或方法公有,可以以任何形式访问。 |
_example | 前置单下划线表示该内容受保护。如果是变量或者函数,在from some_module import *这种情况下,不会被导入。如果是成员或者方法,仅允许类内部使用及该类的子类继承。 |
__example | 前置双下划线表示该变量、函数、成员或方法私有,无法以任何方式被外部直接使用。类的私有成员及方法无法被子类继承,但对于本类来说,仍可以用a_instance._ClassName__MethodName()来调用。 |
__ example__ | 前后双下划线的命名方式用于python里的特殊方法。 #内建方法,用户不要这样定义。 |
example_ | 后置单下划线,用于避免和Python关键词冲突,无特殊含义,例如:int_。 |
8.5 类的专有方法
方法 | 含义 |
---|---|
_ init _ | 构造函数 |
_ del _ | 析构函数 |
_ repr _ | 打印转换 |
_ len _ | 获得长度 |
_ add _ | 加运算 |
_ sub _ | 减运算 |
_ mul _ | 乘运算 |
_ truediv _ | 除运算 |
_ mod _ | 求余 |
_ pow _ | 乘方 |
8.6 命名空间(namespace)
-
类似于从名称到对象的映射,大部分的命名空间都是通过字典来实现的。
-
每个命名空间都是独立的,相互之间没有影响。
-
一个命名空间里面不允许有重名的情况发生,不同的命名空间之间可以重名的。
-
命名空间有三种:
- 内置名称:在Python语言里面内置的一些函数名,比如char;或者说一些异常的名称,比如exception。
- 全局名称:在模块里面定义的名称,比如变量、函数、类、以及导入的一些其他的模块等等。
- 局部名称:函数里面定义的名称,记录的就是函数里面的变量,参数还有一些局部变量等。或者说他作用于类里面,记录类的一些函数参数变量等等。
-
命名空间是有生命周期的,他的生命周期取决于对象的作用域,如果对象执行完成了,命名空间的生命周期就结束了。
- 作用域:Python整个代码的程序可以访问到这个命名空间里面的一些正文的区域
-
不能从外部的命名空间访问到内部的命名空间的对象。比如不能从全局的命名空间里面访问局部的命名空间里的对象。
-
全局变量:在全部的范围里面
-
局部变量:在某一个函数或者某一个类里面
局部变量只能在被声明的函数内部访问,全局变量在整个范围都可以。