灵活的使用函数与类是任何一门程序语言的核心。
编程的范式:

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]

注意事项

  1. 在使用函数前必须定义函数,否则会引发NameError.
  2. 使用函数记得return,而且print不能等同于return。
  3. 注意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
  1. 在书写函数时,推荐在代码块中附加文档,这个文档按照之前描述的,一般会在三引号中间。
##要学会写函数的标注
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
10-04 11:33