Python函数教程
"""
python定义函数, 对代码进行封装,python也是引用传递,而不是值传递
1- 如果函数名一样,python并不会报错,而是会覆盖
def 函数名(参数)
"""
def
"HAHAHHA"
def
"HAHAHHA22222"
for
in
# 如果提示shadows in xxx build in是因为你定义的函数名和内置的函数名一样,比如sum()
def
"a + b = %d"
# 带有返回值的函数, 使用 -> 的方式,和typescript类似
def
return
"a + b = %d"
"""
函数的嵌套调用,就是函数中调用另一个函数
1- my_func02 必须定义在My_func01之前,真正调用的时候才会加载,并不会全局预加载
2- 内置函数的作用域,不会自动调用
"""
def
"C"
"D"
def
"A"
"B"
def
"A"
# 内置def函数,注意作用域, 注意内置函数不会自动调用
def
"C"
"D"
"B"
# 函数参数的乱序位置,也可以像kotlin一样添加关键字参数
# 注意:如果某个参数使用了关键字参数,那么之后的参数必须都必须使用关键字参数
# 换句话说,就是参数可以合理的一一对应,开发中一般很少使用关键字参数,看懂即可
def
return "name: %s, age: %s"
"26" "张三"
"""
缺省函数,就是参数可以有默认值,跟kotlin一样
返回值也可以简写,省略 -> int:
"""
def
"姓名:%s, 年龄:%s"
"张三"
"李四"
"""
元组[]不定长参数,参数的数量不确定, 调用类似于位置参数
参数名之前加上*表示这个星号表明参数的类型为元祖,但是传入实参的时候不需要中括号[]
"""
def
"""
字典类型{}的不定长参数, 调用类似于关键字参数name=的形式
参数名前面加上**两个星号,表明这个参数为一个字典,传入的时候不需要写{},但是只能传入一个字典
"""
def
"name"
"age"
"小明"
"""
一个函数的包含多return个
"""
def
if
return "优秀"
elif
return "中性"
else
return "差"
"""
处理多个返回值的方式
1- return ["小明", 28]
2- return {"name":"小明","age":28]
2- return 返回值1, 返回值2
"""
def
return
"张三"
"张三"
"""
python中的拆包(列表,字典,多个返回值): 一次性初始化多个变量的值
如果返回值是列表,字典,或者多个返回值,可以直接用来赋值多个变量的方式就叫做拆包,简化代码量
"""
True "Hello World"
True "Hello World"
"李四"
"-->"
"""
拆包中python快速交换两个变量的值, 免去了temp中间值
"""
# b的引用给a, a的引用给b,快速交换值
"""
函数中的局部变量的释放狮是在函数执行完后就马上消失
全局变量是等真个程序运行完后进行销毁,作用域是整个函数
1- 如果局部变量名和全局的相同,那么执行的时候根据就近原则
2- 如果函数内找不到该变量名,那么就去找全局变量
3- 如果函数内想要就该外面的全局变量,使用globe关键字
"""
def
# num = 20 这里是创建一个新的内部变量
global
# 这里告诉函数并非创建新的局部变量,而是使用全局的变量操作
"内部num = %s"
"外部num = %s"
"""
函数自建函数文档说明help(len)
如果函数内没有自定义文档说明,那么就返回找函数名上面一行的注释
"""
# 这里是没有专门的说明进行返回的内容
def
"""
返回两个参数的和
:param num01: 数字1
:param num02: 数字2
:return: 两个数字的和
"""
return
"""
id(obj)查找obj内存的物理地址引用门牌号
类似:定了一个房间但是没有入住,调用的时候才入住
a,b指向同一个房间,节省内存
"""
"abc" # 字符串,元祖()等不可不的数据类型,修改的话是copy重新开一个房间
"abc" # 列表[],字典可变数据结构,修改的话是在同一个房间进行修改的。
"abcd"
Python函数---递归专栏
"""
斐波那契
python中的递归函数, time模块中的sleep(单位是秒s)
1- 用现有的while循环来实现
2- 递归实现,必须有一个停止的条件来调用自己
"""
"""
原理:
n! = {
if -> n * (n - 1)! if( n>=0)
else -> 1 if( n=0)
}
1- f(3) -> 3*f(2)
2- f(2) -> 2*f(1)
3- f(1) -> 1*f(0)
4- f(0) -> return 1
"""
def
if
return
else
return
"""
递归的核心就是将表达式分部分,重复的部分和截至的部分
递归求fib序列: 1 1 2 3 5 8
fib(n) = {
n = fib(n-2) + fib(n-1) if n>2
n = 1 else (n=1 or n=2)
}
"""
def
if
return
else
return
"""
lambda关键字表示这是一个匿名函数,通过小括号来执行()
"""
# 无参数无返回值
def
"Hello World 1"
lambda
"Hello World 2"
lambda "Hello World 3"
# 无参数有返回值, lambda冒号后面不用写return
def
return "Hello World 4"
lambda "Hello World 5"
# 有参数,无返回值,参数写在lambda后面,冒号前面
def
"Hello World 6 --> %s"
"张三"
lambda "Hello World 7 --> %s" "张三"
# 有参数,有返回值
def
return "Hello World 8 --> %s"
"李四"
lambda "Hello World 9 --> %s" "李四"
"""
匿名函数lambda作为函数参数
函数内a,b进行特定操作后,最后交给callback进行回掉
"""
def
"result = %d"
# lambda a,b: a + b
lambda
Python类教程(面向对象)
class
def
def
return "姓名:%s 年龄: %s 学号: %s"
def
# 监听对象销毁,可以用来用户复活
"再见"
def
"姓名:%s 年龄: %s 学号: %s"
"张三"
# 引用计数+1
# 引用计数+1
del
# 引用计数-1del
# 引用计数-1del
# 引用计数=0
# input()
"""
1- 使用同一个类创建的不同对象,**属性**是需要单独开辟内存的,防止一损俱损
2- 但是类的自定义方法是唯一的只有一份内存, 是通过self判断不同的调用对象是谁
"""
"张三"
"张三"
# name作为类属性,有单独的内存空间,id地址不同
# 但是因为小整数型原因,显示的id相同,但原理id是不同的
# 类方法是唯一一份的,所以id相同
"""
单继承,class B(A) 括号里面的是相对B来说的B的父类,集成了A的属性和方法
1- python中类的属性是直接写在init方法中的
"""
class
def
def
class
def
"我自己B类的自定义方法"
"""
多继承class D(C, A),如果多个父类C,A中都含有相同的方法和属性print_num那么子类D继承的是就是C的,注意继承的先后顺序
1- 父类中的属性和方法如果相同的话,会继承第一个父类的属性和方法,按照集成的顺序走init构造方法
2- D类中重写父类的方法,如果自己d类中重写了init方法,那么就不会继承任何的父类属性从init方法中
3- 换句话,子类重写了父类的方法,那么不在使用父类同名的方法,包括init构造方法
4- 子类中重写了父类的方法但是还是想调用父类的方法,
"""
class
def
def
class
def
"这是D类自己的属性age"
"这是D类重写父类的属性num"
def
# 再将self.num更改回来
"这是D自己重写父类的方法"
# 但是子类还是想使用**父类的属性**调用父类重名的print_num方法
# 使用A.__init__(self)方法来更改self.num的值
def
# 本来D对象中self.num = "这是D类重写父类的属性num"
# 把self传进去,当前的self.num = 10
# 或者使用super在子类方法中调用父类的方法
def
# super(D, self).print_num() 或者下面的简写形式
def
"我自己D类的自定义方法"
"""
类中的私有属性和方法
1- 父类中的money不想让子类继承,进行私有self.__属性名
2- 方法前加上两个下划线使方法私有化, 私有的属性和方法只能在类内使用
3- # 私有属性子类不能使用,相当于java中的对象不能加点来获取private的属性值
"""
class
def
"古法"
# 两个下划线开头表示私有属性
def
# 私有属性可以在类自己种使用
"制作古法煎饼果子"
def
"你好python"
# print(lishifu.money)
"""
子类不能继承父类的私有属性和方法
因为根本没有继承下来,所以子类内部方法中根本就不能调用父类的私有属性和方法
"""
class
def
"xx"