地点&时间
20180630日 太平洋咖啡店
线下的语法练习
希望大家勤加练习,学习学来的都是自己的啊。
这里的函数注释以及代码行注释完全是教学用,实际不用这样写。
TestDemo.py
新建python文件
# 函数作用域 如果代码行数几千行,变量名会存在重复,所以变量有对应的作用域的范围
# 变量按作用域的来划分,一个是全局 global 一个是局部 local
# 全局 global在函数和类外部定义,也是一般在代码最上方描述。全局变量在课上会有对应的描述, python推荐用大写来标记
# 局部在函数内部定义,成员变量和局部变量有一定差别,如下
# 比如常见的错误:
# 变量覆盖,和变量没有定义 name "xxx" is not defined
# 第一段函数外打印类变量(类变量可以被类名引用,被函数引用)
# 第二段在类下面的函数内打印类变量
# 代码见下方的def _print_id()
# 第三段建立add()函数,定义1个类变量字符串类型的b对象,接受1个参数a,a+b相加
# 第四段sum()函数的局部对象有哪些(包含变量和方法对象) (<------新增的)
# 第五段看add()函数的结果和play_id字符串相链接,add()返回是int需要str转换
class TestDemo(object): # 类名格式首字母优先大小写
"出于对java的考虑,最好把文件名和类名定义完全一致"
play_id = "haha" # 类变量 在类下面不在函数范围内
a = "100" # 类变量""
# 本文函数调用注释是教学级别的,学习时可以自己这样写,实际工作中如何注释web自动化课程尾部会讲
def _print_id(self): # self是占位也是代表实例化,实例化在内部使用。
"类内部函数,打印"
# 函数是代表当前类私有的函数,是命名规范来提醒不要被其他地方调用 是一种约定的,不是语法规则
return self.play_id # play_id和self链接后,变成了TestDemo实例化后 这个变量了属于类的成员变量
# 成员变量是一种静态变量
def add(self, b): # b是形参,传入什么是自己约定的 下面文档注释"""按回车
"""
在类外部去调用add()
:param b: 按需求是传入1个int
:return: int 类变量a+形参b
"""
# 因为b是int类型,str要和int相加,所以TestDemo.a需要转换成int类型
# 如果a是非数字的字符串
return int(TestDemo.a) + b # TestDemo.a类型是str
def sum(self, b): # b的形参是给add()用的,形参重载,这个b不等于上面的b
"""
在类外部把add()+play_id连接
:param b: 重载add().依照语法写入int 确保add(b)返回是int。就算不是其实也没关系,语法严谨
:return: str
"""
# print(b)#这里打印的b作用域是sum函数的,不是add()的b,是由下面函数调用时接受的新参数。
# func1早期增加代码可读性,但又开销,多创建了1块内存 因为这里被引用了所以 它也是类变量
func1 = str(self.add(b)) # 这里的b要随着add()重载 add()由int-->str
# func1引用计时为1
# 第五段
print("新增的第四段sum函数的局部变量有哪些", locals()) # self.add() 因为是一个类方法 所以也会随着locals被输出,因为这里没有被调用或者引用所以是一段内存地址
return func1 + TestDemo.play_id # func1引用1-1=0
t = TestDemo() # t是TestDemo的实例化对象
print("类名引用类变量", t.play_id) # print打印加前面注释是做静态打印调式
# 被函数引用
def print_id(): # 和class类是平级的,这个不属于class内的函数
# 测试函数,如果有返回的 函数的文档用""" """
"打印TestDemo的类变量,函数名不能是print关键字"
# return TestDemo().play_id #因为已经有实例化对象t了,所以尽量用下面的
return t.play_id
# 调用函数print_id(),因为上面是return所以需要打印
print("类名引用类变量", print_id())
print("第一段函数外打印类变量完成")
print("函数add调用后结果100+5=", t.add(5)) # 第三题105
print("调用函数sun,让add函数和类变量play_id相加", t.sum(5)) # 结果是105haha 5是add()函数内重载b用的