一. 函数
1.1 函数定义
python的函数是以 def 开头。在PHP及JS中函数都是使用 function 关键字来声明一个函数,这一点与大多数编程语言不同,大家需要注意一下。再次声明一下,python中的代码块都是通过 : + 换行 + 4个空格 来区分代码边界的。具体格式如下:
def a():
print('具体的函数代码块')
在python中函数的参数定义基本和其他语言一致。但是,我们在调用函数进行传参时,既可以通过顺序进行传参,也可以通过指定关键字的形式传参。具体表现如下:
def div_data(a,b):
return a/b
# 按顺序传值
s = div_data(4,2)
print(s) # 打印结果:2
# 指定参数传值,即使顺序不一样也不影响传值
s = div_data(b=4,a=2)
print(s) # 打印结果:0.5
1.2 变量的作用域
函数中的变量属于局部变量,函数外的为全局变量。局部变量即使和全局变量名称一样,也不会影响全局变量。例如下方案例:
a = 1
def sum1(x,y):
a = 3
return x+y
print(sum1(4,12)) # 打印结果:16
print(a) #打印结果:1
从上面的案例可以看出,虽然我们在函数 sum1 中已经修改了变量 a 的值,但是最后打印的结果依然是 1 。这是因为函数内的变量属于局部变量,哪怕是和全局变量同名,他也是局部变量。这一点和很多编程语言不太相同,大家需要特别注意一下
如果大家想知道函数内的变量和全局变量是不是同一个,可以使用 id() 函数查询变量的内存地址
二. 对象
2.1 类的定义及实例化
类的定义比较简单,通过 class 这个关键字定义类,并且以 (): 结尾。
有点我们需要特别注意,在python的类中申明一个对象方法时,这个方法的第一个参数必须是 当前类的对象 ,一般都是用 self 表示。当然我们也可以改成 this ,不过python的编程习惯中都是用 self 。此外,在方法中调用属性是通过 self 关键字。具体格式如下:
class Student():
# 构造方法
def __init__(self):
self.name = '学生类' #定义类的属性
self.age = 1 #定义类的属性
# 函数
def print_code(self,value):
print(value)
# 测试属性调用
def print_attr(self):
print('对象名称:'+self.name)
print('年龄'+str(self.age)) # 注意age为int类型,不能直接与字符串拼接
实例化一个类就和调用函数一样,这一点大家需要特别注意。在其他语言中都需要通过关键 new 加类名的方式来实例化, 但是python不需要。
# 例如实例化上面的学生类
student = Student()
2.2 类属性及类方法
python中的类属性和方法类似与其他编程语言中的静态方法,但是他不是静态方法。虽然他不是静态方法,但是类方法和类属性的调用和其他编程语言中的静态方法很相似,都是通过 类 直接调用。此外,类方法的第一个参数必须存在,并且,第一个参数是当前类,python编程习惯使用 cls 来表示。具体方式如下:
class Student():
# 定义类属性
sum1 = 0
# 对象方法中测试静态属性调用
def print_attr(self):
self.__class__.sum1 = 3
# 或者是
Student.sum1 = 3
# 定义类方法
@classmethod
def class_func(cls):
cls.sum1 += 1
print(cls.sum1)
print('这是类方法')
@classmethod是一个装饰器,他代表了当前方法为类方法
在上述代码中,对象方法中调用类属性时,有两种方式。第一种是通过 __class__ 关键字调用,第二种是通过 当前 类 直接调用
类方法和类属性定义好之后,我们就可以通过类进行调用了,不过类方法和属性不仅可以通过类方法调用,还可以通过对象调用:
# 例如实例化上面的学生类
st = Student()
# 通过对象调用类方法
st.class_func()
# 使用类直接调用类方法
Student.class_func()
2.3 静态方法的定义
静态方法的定义和类方法的定义有点相似,都是通过一个装饰器来定义。静态