Week3

函数

1、介绍

编程方式:

面向对象:华山派 --》类 --》关键字 :class

面向过程:少林派 --》过程 --》关键字:过程 def

函数式编程:蛋黄派 --》函数 --》关键字:def

2、定义   

初中函数   x与y , x是因变量y是自变量  y是x的函数 随着x的变化y都有一个确定的值,比如 y=2x

Python定义  :逻辑结构化与过程化 def  函数名(参数):代表接着写子代码   逻辑  再定义返回值 return

(过程和函数 关键字都是def,实际为没有返回值的函数)

'''

def fun():
    "定义一个测试函数"
    return ("CPU:" + str(psutil.cpu_times()) + "%")

x = fun()
'''
View Code

 

可重复利用,low例子

#Herbie Kim
#!/usr/bin/python
# -*-coding:utf-8-*-

#重复利用
import time


def logger():
    time_format = '%Y-%m-%d %X'
    time_current = time.strftime(time_format)
    with open('a.txt','a+') as f:
        f.write('%s end action\n' %time_current)


def test1():
    print('in the test1')
    logger()

def test2():
    print('in the test2')
    logger()

test1()
test2()
View Code

 

返回值

def test1():
    print('hehe....')

def test2():
    print('hehe....')
    return 0

def test3():
    print('hehe....')
    return 1,'kim',['1','hello'],{'name':'herbie'}

x = test1()
y = test2()
z = test3()
print(x)
print(y)
print(z)
View Code

 

参数:

形参与实参

#形参与实参
def test(x,y):    #x,y 代表形参
    print(x)
    print(y)

#test(1,2)    #()内容实参(位置参数为x,y赋值)
test(1,y=5)   # y=5 关键字参数,关键字等于赋值
test(x=3,4)   #报错,关键字参数无法放在位置参数前
View Code

 

非固定参数

def test4(name,age=18,*args,**kwargs):
    print(name)
    print(age)
    print(args)
    print(kwargs)

test4('kim',age=20,home='liangzhu',cat='tesla')
View Code

 

局部变量作用域于函数中,外部调用无法生效 (函数中定义)

name = "kim"

def change_name(name):
    print("我本来叫:",name)
    name = "cake"        #局部变量,只作用域于函数内部,并未改变原生变量名name
    print("但是之后叫:",name)

change_name(name)

print(name)

 

全局变量作用于全局一开始就在程序中定义,函数中也可修改局部变量,当变量为参数或函数无法修改(但不能改!

name = "kim"

age = 19

def change_name(name):
    global age        #在函数中修改全局变量
    age = 18
    name = "cake"
    print("我本来叫:",name,"今年:",age)
    #name = "cake"        #局部变量,只作用域于函数内部,并未改变原生变量名name
    print("但是之后叫:",name,"今年也:",age)

change_name(name)

print(name)
print(age)

注意:局部变量无法修改全局变量只有当 此变量是单纯的字符串或数字。当变量为复杂一些的列表、字典可以修改

names = ["kim","cake","sun"]
def change_name(names):
    names[0] = "金某人"
    print(names)

change_name(names)
print(names)

 

递归

如果一个函数在内部自己调用本身,那么就是递归函数;

def care(n):
    print(n)
    return care(n+1)

care(0)

 

特性:

  • 必须要有明确的结束条件
  • 每次进入更深一层递归时,问题规模相比上一次递归都应有所减少
  • 递归效率不高,层数过多会导致栈溢出

使用场景:传入一个数值一直除以2到无法除为止

def care(n):
    print(n)
    if int(n/2) > 0:
        return care(int(n/2))
    print("-->",n)

care(100)
View Code

 

高阶函数

变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数。这种函数就称为高阶函数

def go(x,y,f):

    return f(x) + f(y)

res = go(3,-6,abs)   #abs 可以将负数转为正数

print(res)

 

posted on 2019-02-13 18:06  HerbieKim  阅读(192)  评论(0编辑  收藏  举报

导航