Python函数的定义和函数的应用

Python基础 09/29 阅读 47 views次 人气 0
摘要:

1、函数能提高应用的模块性,和代码的重复利用率。2、参数传递为,可更改(mutable)与不可更改(immutable)对象。3、闭包和装饰器。

1、函数能提高应用的模块性,和代码的重复利用率。

2、参数传递为,可更改(mutable)与不可更改(immutable)对象。

3、闭包和装饰器。


def hello():
    print("hello function!");
hello()

输出:
hello function!
def p_num():
    global num
    print(num)
    num=50
num=20
p_num()
print(num)

输出:
20
50

结论:

global语句可以起到声明变量作用域。


def area(width, height):
    return width * height
def welcome(name):
    print("www.what21", name)
welcome(".com")
width = 40
height = 50
print("width =", width , ",height =", height, ",area =", area(width, height))

输出:
www.what21 .com
width = 40 ,height = 50 ,area = 2000
def ChangeInt(a):
    a = 100
b = 88
ChangeInt(b)
print(b) # 结果是 88

输出:
88

结论:

1、函数的不可变类型:类似其他语言的值传递,数值、字符串和元组为不可变类型。

2、如fun(a),传递的只是a的值,没有影响a对象本身。比如在fun(a)内部修改a的值,只是修改另一个复制的对象,不会影响a本身。


def ChangeList(mylist):
    "修改传入的列表"
    mylist.append([1, 2, 3, 4]);
    print("函数内取值: ", mylist)
    return
# 调用changeme函数
mylist = [10, 20, 30];
ChangeList(mylist);
print("函数外取值: ", mylist)

输出:
函数内取值:  [10, 20, 30, [1, 2, 3, 4]]
函数外取值:  [10, 20, 30, [1, 2, 3, 4]]

结论:

1、函数的可变类型,类似其他语言的引用传递,列表和字典为可变类型。

2、如fun(la),则是将la真正的传过去,修改后函数外部的la也会受影响。


def outer():
    num = 10
    def inner():
        nonlocal num   # nonlocal关键字声明
        num = 100
        print(num)
    inner()
    print(num)
outer()

输出:
100
100

结论:

1、当内部作用域需要修改外部作用域的变量时,就要用到global和nonlocal关键字。

2、如果需要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要nonlocal关键字。


def w1(func):
    def inner():
        print(" 验证1")
        print(" 验证3")
        print(" 验证4")
        return func()
    return inner
@w1
def f1():
    print( 'f1')
@w1
def f2():
    print('f2')
@w1
def f3():
    print('f3')
@w1
def f4():
    print('f4')
import time
def timer(func):
    def inner():
        start = time.time()
        func()
        end=time.time()
        print(end - start)
    return inner
print(time.time());
@timer   #==> func1 = timer(func1)
def func1():
    print('in func1')
func1()

输出:
1521029364.651659
in func1
0.0

结论:

1、装饰器的本质:一个闭包函数。

2、装饰器的功能:在不修改原函数及其调用方式的情况下对原函数功能进行扩展。


评论

该文章不支持评论!

分享到: