一、函数
1、格式
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ():。
- 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
- 参数可以在括号中进行初始化。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
def function_name(elem1[,elem2[,...]]):
'''
data
'''
code...
return result
调用格式:[var = ]function(elem)
2、参数传递
在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。在函数的参数传递中:
- 不可变类型:值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。
- 可变类型:类引用传递,如 列表,字典。
(1)固定实参传递
def fun(A,B=2,C=5):
return A+B+C
res1 = fun(1,2,3) #位置传递
res2 = fun(A=1, C=2, B=3) #关键字传递
res3 = fun(2) #默认参数
(2)传递列表
def fun(A):
A.pop()
lis = [1,2,3,4,5]
fun(lis[:]) # 传递副本
print(lis)
fun(lis) #传递原型(指针)
print(lis)
输出结果:
[1, 2, 3, 4, 5]
[1, 2, 3, 4]
------------------
(program exited with code: 0)
(3)任意数量实参
def function_name([elem,] *elems ):
'''
data
'''
code...
return result
加了星号 *** 的参数会以元组的形式导入,存放所有固定形参**之后的参数;
如果在函数调用时没有指定参数,它就是一个空元组;
带 * 参数必须放在参数列表的最后。
def printinfo( arg1, *vartuple ):
print ("输出: ")
print (arg1)
print (vartuple)
printinfo( 70, 60, 50 ) # 调用
输出结果:
70
(60, 50)
------------------
(program exited with code: 0)
加了两个星号 ** 的参数会以字典的形式导入,存放所有固定形参之后的参数;
def functionname([formal_args,] **var_args_dict ):
'''
data
'''
code...
return result
调用时,可以使用{key:value}
格式,也可以如下使用key = value
格式:
def printinfo( arg1, **vardict ):
print ("输出: ")
print (arg1)
print (vardict)
# 调用printinfo 函数
printinfo(1, a=2,b=3)
输出结果:
1
{'a': 2, 'b': 3}
------------------
(program exited with code: 0)
二、类
封装的数据类型,类的变量称为属性,类的成员函数称为方法。
# 这个类用于下面内容的说明
class Animal():
def __init__(self, name='', age=1):
self.name = name
self.age = age
self.level = 0
def level_up(self):
self.level++
1、定义
(1)格式
class ClassName():
'''data'''
def __init__(self,var...)
# code
def function(self,arg...)
# code
(2)构造函数
def __init__(self,var...)
# code
开头末尾分别有两个下划线,参数self
指向实例本身,用于访问类的属性、方法;
构造函数用于初始化类的实例;
(3)类方法,类属性
类方法必须包含参数self, 且为第一个参数:
class ClassName():
# ...
def function(self,arg...)
# code
类属性、类方法可以以两个下划线开头,表示私有属性,在类外部无法直接进行访问;
2、使用
(1)初始化
var = ClassName(arg...)
(2)访问
var.name
访问属性,var.name()
访问方法;
访问类方法时,实参不需要包含self
;
3、继承
(1)定义
#类定义
class BaseClassName1():
#定义属性
#定义构造方法
def __init__(self,arg...):
#code
def (self,arg...):
#code
#单继承
class DerivedClassName(BaseClassName1):
def __init__(self,arg...):
#调用父类的构函
BaseClassName1.__init__(self,arg...)
#添加、覆写其他方法
BaseClassName必须与派生类定义在一个作用域内。除了类,还可以用表达式,基类定义在另一个模块中时,这一点非常有用:
class DerivedClassName(modname.BaseClassName):
(2)重定义
子类方法可以与父类相同,子类实例默认调用子类方法;
同时,如果需要调用父类方法,可以使用super()
函数;
class Parent: # 定义父类
def myMethod(self):
print ('调用父类方法')
class Child(Parent): # 定义子类
def myMethod(self):
print ('调用子类方法')
c = Child() # 子类实例
c.myMethod() # 子类调用重写方法
super(Child,c).myMethod() #用子类对象调用父类已被覆盖的方法
(3)多继承
class DerivedClassName(Base1, Base2, Base3):
#code
三、模块
保存程序代码的.py
独立文件,可以导入其他程序程序中。
1、格式
(1)导入整个模块
import module_name
将模块中所有代码导入该程序中;
调用导入模块的函数时,使用module_name.function_name()
调用;
(2)导入特定函数
from module_name import function_1,function_2....
从module_name.py
中导入对应函数;
调用导入函数时,使用function_name()
调用(无需加上模块名);
(3)导入类
from module_name import class_1,class_2....
从module_name.py
中导入对应类;
使用类时,使用Class_name()
调用(无需加上模块名);
2、别名
(1)给模块指定别名
import module_name as md
(2)给函数/类指定别名
from module import function_name as fc
from module import class_name as Cl
3、Python标准库
(1)随机数函数
模块 random
包含以各种方式生成随机数的函数,其中的 randint()
返回
一个位于指定范围内的整数,例如,下面的代码返回一个 1~6 内的整数:
from random import randint
x = randint(1, 6)