灵活的使用函数与类是任何一门程序语言的核心。
编程的范式:
Procedural Programming 程序编程
Object-Oriented Programming 面向对象的编程
Functional Programming 功能编程
函数
函数顾明思义,跟我们学的数学定义一样,参数进去,结果出来。
去重
a=[1,2,3,2,5,8,1,3,10,12,15,5]
b=list(set(a))
print(b)
##[1, 2, 3, 5, 8, 10, 12, 15]
基本功能
函数是用来重用你的功能性代码的:如果一件事情你要做多次,那就用函数。
def dedupe(items):
collect = set()
for item in items:
if item not in collect:
collect.add(item)
return collect
a=[1,2,3,2,5,8,1,3,10,12,15,5]
b=list(dedupe(a))
print(b)
##[1, 2, 3, 5, 8, 10, 12, 15]
默认参数应该是不可变的!如果在默认参数中使用了[], {}这种可变类型,很快你的结果就会变得混乱。
import numpy as np
def abs(x=0):
y=x if x >= 0 else -x
return y
print(abs(-10))
print(abs())
def addlist(x=[]):
x.append(np.random.randint(5))
print(x)
return None
addlist()
addlist()
addlist()
##
10
0
[1]
[1, 3]
[1, 3, 0]
注意事项
- 在使用函数前必须定义函数,否则会引发NameError.
- 使用函数记得return,而且print不能等同于return。
- 注意return的正确位置(同阶级看待问题)
def is_right(n):
for i in range(2,n):
print(i)
if n%i==0:
return False
return True
def is_wrong(n):
for i in range(2,n):
print(i)
if n%i==0:
return False
return True
print(is_right(9))
print("-----"*10)
print(is_wrong(9))
####
2
3
False
--------------------------------------------------
2
True
- 在书写函数时,推荐在代码块中附加文档,这个文档按照之前描述的,一般会在三引号中间。
##要学会写函数的标注
def abs(x=0):
"""
功能
参数类型
函数计算后的类型变化
返回值
"""
return None
变量空间
函数内可以看到函数外的变量,函数外层无法看到内层的变量
##变量空间,包括内部变量
x="zheshisha"
def func():
print(x)
func()
##
zheshisha
x="zheshisha"
def func():
global x##代表全局变量
x="zheyoushisha"
print(x)
func()
print(x)
##
zheyoushisha
zheyoushisha
全局变量globals、局部变量local
=[123,1243]
del a
globals()["a"]=1
print(a)
##
1
凶残的eval( )和exec( )
evaluate 是对表达式求值
execute 是直接执行字符串里面的语句
a=3
b=eval('a+2')
print(b)
##5
a=3
e=[2]
exec("b"+str(e[0])+"=a**2")##构建一个b2的变量
print(b2)
##9
装饰器是接受函数作为参数返回结果,函数的话是接受变量作为参数返回结果。
def decorated(func):
print("Decorated first")
return func
def main_func():
print("Main called")
dec=decorated(main_func)##运用装饰器语法可以省略
dec()
##
Decorated first
Main called
如果你有一批变量想统一按一个规则处理,并且需要缩减代码,你需要函数。
如果你有一批函数想统一按一个规则处理,并且需要缩减代码,你需要装饰器(Decorator)
装饰器的语法以@开头,接着是装饰器函数的名字和可选的参数。紧跟着装饰器声明的是被修饰的函数和装饰函数的可选参数。
def decorated(func):
print("Decorated first")
return func
@decorated ##Decorator语法
def main_func():
print("Main called")
main_func()
##
Decorated first
Main called
面向对象编程:Object-Oriented Programming
在函数的基础上,帮助程序员组织代码,并在适当的场合复用代码。
class Employee(object): #括号里指明该类从哪个类继承而来,object是所有类最终会继承的“基本”类
def __init__(self,name):
self.name=name
def set_age(self,age):
self.age=age
def set_major(self,major):
self.major=major
def set_card(self,card):
self.card=card
Francoise=Employee('Francoise') # 构造一个实例
Francoise.set_age('22')
Francoise.set_major('Physics')
Francoise.set_card('000142')
print(Francoise.age)
print(Francoise.major)
print(Francoise.name)
##
22
Physics
Francoise
类之间的关系可以用继承实现
class Manager(Employee):
qualification="5-year Experience Expert"
Alexandre=Manager('Alexandre')
Alexandre.set_age('25')
Alexandre.set_major('Mathematics')
Alexandre.set_card('00004512')
print(Alexandre.major)
print(Alexandre.qualification)
##
Mathematics
5-year Experience Expert