函数
1、定义
def xx():
pass
- 使用关键字def定义函数
- 函数相当于java中的static方法,可以不用创建对象而直接进行调用
2、返回
def xx():
return '123'
a = xx()
- 使用关键字return可以定义函数的返回
- 如果没有return语句,或者return语句后面没有值,则相当于返回None
3、参数
def xx(a, b, c):
print(a, b, c)
xx(1,'22','df')
- 调用函数传入参数时,形参和实参的个数必须匹配,否则会报错
4、参数名传值
def xx(a, b, c):
print(a, b, c)
xx(1,c='22',b='df')
- 某个实参使用参数名传值时,其后的实参也必须使用参数名传值
5、默认参数值
def xx(a, b=123, c='fd'):
print(a, b, c)
xx(1,'22')
xx(1,c='22')
- 在声明时,如果某个形参声明了默认值,则其后的形参也必须设置默认值
- 在传参时,针对设置了默认参数的参数,如果不传入新值,则使用默认值
6、不定长参数
def f1(a, b, *c):.
print(a,b,c)
f1(1,2,3,4,5)
1 2 (3, 4, 5)
- 用*来定义不定长的参数,为元组类型,必须放在定义的最后
def f2(a, b, **c):
print(a,b,c)
f2(1,2,d=3,e=4)
1 2 {'d': 3, 'e': 4}
- 用**来定义不定长的参数,为字典类型,必须放在函数定义的最后
def f3(a, b, *c, **d):
print(a,b,c,d)
f3(1,2,5,d=3,e=4)
1 2 (5,) {'d': 3, 'e': 4}
- 同时使用*和**定义
7、匿名函数
lambda [arg1 [,arg2,.....argn]]:expression
sum = lambda arg1, arg2: arg1 + arg2
# 调用sum函数
print ("相加后的值为 : ", sum( 10, 20 ))
8、传值和传地址
number、str、tuple为不可变对象,为传值
list、dict、set为可变对象,为传地址
9、作用域
全局变量:声明在函数外的变量
局部变量:声明在函数内的变量,(声明在if等控制结构体内的变量可以在结构体外直接使用)
name = 'abc'
def p():
global name
name = 12
- 如果是在函数内获取全局变量的值,可以不使用global关键字而直接使用
- 如果需要对全局变量进行修改,则必须先使用global关键字进行声明
- 如果在函数内声明了与全局变量同名的变量,则优先使用局部变量
10、关于重载
在python中没有重载机制,要求通过函数的参数列表机制来实现类似要求
如果函数中声明了同名的函数,则只加载最后一个同名函数
类和对象
1、类的声明和对象的创建
class stu():
name = 'tx'
def set_age(self, age):
self.age = age
s = stu()
s.set_age(20)
print(s.name, s.age)
- 通过关键字class来定义类,其后为类名,如果没有继承,类名后的圆括号可以省略
- 类有属性和方法,通过.操作符进行调用
- 类的属性有两种创建方法:
- 在类中方法外进行声明
- 在方法中,直接通过self调用对象的属性,如果不存在,则会创建
- 类的方法通过关键字def声明,其与函数的使用类似
- 类中方法必须至少有一个参数,每个方法的第一个参数表示类的对象本身,一般为self,也可以为this等其它命名
- 通过self可以调用其属性和方法
2、私有
__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。
__private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类的外部调用
3、类的专有方法:
- init : 构造函数,在生成对象时调用
- del : 析构函数,释放对象时使用
- repr : 打印,转换
- setitem : 按照索引赋值
- getitem: 按照索引获取值
- len: 获得长度
- cmp: 比较运算
- call: 函数调用
- add: 加运算
- sub: 减运算
- mul: 乘运算
- truediv: 除运算
- mod: 求余运算
- pow: 乘方
4、命名空间/作用域
Python 的作用域一共有4种,分别是:
有四种作用域:
- L(Local):最内层,包含局部变量,比如一个函数/方法内部。
- E(Enclosing):包含了非局部(non-local)也非全局(non-global)的变量。比如两个嵌套函数,一个函数(或类) A 里面又包含了一个函数 B ,那么对于 B 中的名称来说 A 中的作用域就为 nonlocal。
- G(Global):当前脚本的最外层,比如当前模块的全局变量。
- B(Built-in): 包含了内建的变量/关键字等,最后被搜索。
规则顺序: L –> E –> G –> B。
在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置中找。
5、继承
多继承,子类覆盖
需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找父类中是否包含方法。
模块
(1)介绍
模块本质上就是一个py文件,或者多个文件组成一个文件夹或者多层文件夹
py文件中存放有编写好的函数或者类,开发者可以导入直接使用,而不需要再次编写,有助于提高开发效率
模块的来源:
- python安装时自带的、官方的、内置的、标准的
- 第三方的
- 开发者自行准备的
(2)导入
假设在文件夹t下的tool.py下有函数print_str()
在tool.py同级目录下的py文件,可以通过以下两种方式使用
# 方式1
import tool
tool.print_str()
# 方式2
from tool import *
print_str()
如果不是同级目录下的py我呢见调用,则可以通过t.tool指向tool.py文件,替代两种方法中的tool
注意:如果引入过多未使用的库,会极大地影响项目的加载启动时间,并且占用内存资源,影响程序运行效率