Python 的函数嵌套、引用、装饰器及列表

一、函数嵌套

所谓函数,就是把具有独立功能的代码块组织成为一个小模块,在需要的时候调用
函数的使用包含两个步骤
        1.定义函数--封装独立的功能
        2.调用函数--享受封装的成果
函数的作用:在开发时,使用函数可以提高编写的效率以及代码的重用‘’
函数:
函数是带名字的代码块,用于完成具体的工作。
需要在程序中多次执行同一项任务时,你无需反复编写完成该任务的代码,而只需调用该任务的函数,
让python运行其中的代码,你将发现,通过使用函数,程序编写,阅读,测试和修复都将更容易

def 函数名( ):

  函数封装的代码
1.def是英文define的缩写
2.函数名称应该能够表达函数封装代码的功能,方便后续的调用
3.函数名称的命名应该符合标识符的命名规则
  可由字母,下划线和数字组成
  不能以数字开头
  不能与关键字重名
def sum_2_sum():
    num1 = 10
    num2 = 20
    result = num1 + num2
    print '%d+%d=%d' % (num1,num2,result)
sum_2_sum()

这里写图片描述
这里写图片描述

形参和实参

形参:定义函数时,小括号中的参数,是用来接收参数用的,在函数内部作为变量使用
实参:调用函数时,小括号中的参数,是用来把数据传递到函数内部用的

def sum_2_sum(num1,num2):
    """对两个数字求和"""
    result = num1 + num2
    print '%d+%d=%d' % (num1,num2,result)
# 实参:调用函数时使用的,小括号中的参数,
# 是用来把数据传递到函数的内部
sum_2_sum(500,20)   #光标定在这一行按ctrl+q可以看到函数的文档

这里写图片描述
这里写图片描述

函数的返回值:

在程序开发中,有时候,会希望一个函数执行结束后(举例子:温度计函数,要返回给我>们当前的温度),告诉调用者一个结果,以便调用者针对具体的结果作出后续的处理.
返回值是函数完成工作后,最后给调用者的一个结果
在函数中使用return关键字可以返回结果
调用函数一方,可以使用变量来接收函数的返回结果
def sum_2_sum(num1,num2):
    """对两个数字求和"""
    result = num1 + num2
# 使用返回值:告诉调用方计算结果是什么
    return result
#可以使用一个变量,来接收函数执行的返回结果
sum_result = sum_2_sum(10,10)
print sum_result

这里写图片描述
这里写图片描述

# 1.定义一个函数,能够打印*组成的一条分割线
def print_line():
    print '*' * 50
print_line()

# 2.定义一个函数能够打印由任意字符串组成的分割线
def print_line(char):
    print char * 50
print_line('&')

# 3.定义一个函数能够打印任意重复次数的分割线
def print_line(char,times):
    """打印多行分割线

    :param char:分割线使用的分隔字符
    :param times:分隔线重复的次数
    """
    print char * times
print_line('#',50)

# 4.定义一个函数能够打印五行分割线,分割线符合要求3
def print_lines():
    row = 0
    while row < 5:
        print_line('$',50)
        row += 1
print_lines()

这里写图片描述
这里写图片描述
这里写图片描述

模块文件:

每一个python源文件都可以是一个模块文件
可以在一个python文件中定义函数或者变量
然后在另一个文件中使用import filename 导入这个模块
导入之后,就可以使用模块名.变量/模块名.函数的方式,
使用这个模块中定义的函数和变量.
光标定在函数上,按ctrl可以直接进到调用的函数内容
import func_03
import func_01
func_03.name
func_03.print_line('*',40)
a = func_01.sum_2_num(10,2)
print a

局部变量

局部变量是在函数内部定义的变量,只能在函数内部使用
函数执行结束后,函数内部的局部变量,会被系统回收
不同的函数,可以定义相同的名字的局部变量,但是各用各的不会产生影响
def demo1():
    # 定义一个局部变量
    num = 10
    print num
# 在函数内部定义的变量,不能在其他位置使用
#print num
demo1()

这里写图片描述
这里写图片描述

def demo1():
    # 定义了一个局部变量
    # 出生:执行了下方的代码后,才会被创建
    # 死亡:函数执行完后
    num = 10
    print num
def demo2():
    # demo1中定义的局部变量,不能在其他函数中使用
    pass  #占位
demo1()
demo2()

这里写图片描述
这里写图片描述

不同的函数,可以定义相同的局部变量,但是不会产生影响
这里写图片描述
这里写图片描述

全局变量:

全局变量是在函数外部定义的变量,(没有定义在某一个函数内),所有函数内部都可以使用这个变量
# 全局变量,在函数外定义
num = 10


def demo1():
    print 'demo1====> %d' % num


def demo2():
    print 'demo2====> %d' % num

demo1()
demo2()

这里写图片描述
这里写图片描述
1.使用赋值语句,会在函数内部,定义一个局部变量

num = 10


def demo1():
    # 使用赋值语句,会在函数内部,定义一个局部变量
    num = 99
    print 'demo1====> %d' % num


def demo2():
    print 'demo2====> %d' % num

demo1()
demo2()

这里写图片描述
这里写图片描述
2.修改全局变量的值 使用global关键字 声明一下变量即可

num = 10


def demo1():
    # 希望修改全局变量的值 使用global关键字 声明一下变量即可
    # global 关键字会告诉解释器后面是一个全局变量
    # 再用赋值语句时,就不会创建局部变量了
    global num
    num = 99
    print 'demo1====> %d' % num


def demo2():
    print 'demo2====> %d' % num

demo1()
demo2()

这里写图片描述
这里写图片描述

3.注意:在开发的时候,应该把模块中的所有全局变量定义在其他函数的上方

gl_num = 10
gl_title = 'python'
gl_name = 'lily'


def demo():
    print '%d' % gl_num
    print '%s' % gl_title
    print '%s' % gl_name

demo()

这里写图片描述
这里写图片描述


二、引用

python中:
        变量和数据是分开存储的
        数据保存在内存中的一个位置
        变量中保存的是数据在内存中的地址
        变量中记录数据的地址,就叫做引用
        使用id()函数可以查看变量中保存数据所在内存的地址

变量的引用:
    1.变量和数据都是保存在内存中的
    2.python中函数的参数传递以及返回值都是靠引用传递的
# 定义了一个函数,准备了一个叫num变量,引用数字10的
# 内存地址
def test(num):
    print '在函数内部%d对应的内存地址是 %d' % (num,id(num))
# 1.定义了一个数字变量
a = 10
print 'a 变量保存数据内存的地址是 %d' % id(a)

test (a)

这里写图片描述
这里写图片描述

def test(num):
    print '在函数内部%d对应的内存地址是 %d' % (num,id(num))
    # 定义一个字符串变量
    result = 'hello'
    print '函数要返回数据内存地址是 %d' %id(result)
    return result
# 定义了一个数字变量
a = 10
print 'a 变量保存数据内存的地址是 %d' % id(a)

r = test (a)
print '%s 的内存地址是 %d' %(r,id(r))

这里写图片描述
这里写图片描述


三、装饰器

概念:把一个函数当作函数,传递给函数,返回一个加强版的函数
本质上是一个返回值的函数
“在不改变原函数的基础上,给函数增加功能”

1.让func1函数在执行结果后添加一串$,并且不改变原函数

def func_01():
    print 'Have a nice day!'
# 要求:让func_01函数在执行结果后添加一串$,并且不改变原函数
def outer():
    func_01()
    print '$$$$$$$$$$$$$$$$'
outer()

这里写图片描述
这里写图片描述

def func_01():
    print 'Have a nice day!'
def func_02():
    print 'Hello python'
# 要求:让func1函数在执行结果后添加一串$,并且不改变原函数
# outer()相当于是一个“化妆师”
# 将传递进来的参数“化妆”,然后返回“化妆好了的函数”
# 这里为什么要有一个形参:因为“化妆师”可以给每个人化妆
def outer(func):
    def inner():
        func_01()
        print '$$$$$$$$$$$$$$$$'
    # 将装饰好的函数返回
    return inner
# f是func1的加强版本,其实就是inner()
f = outer(func_01)
f()
q = outer(func_02)
q()

这里写图片描述
这里写图片描述
2.调用一个装饰过的函数

def say(age):
    print 'man is %d years old' %age
def outer(func):
    def inner(age):
        if age < 0:
            age = 0
        func(age)
    return inner
# 得到一个装饰过的函数
say = outer(say)
# 要想执行函数,我们还得重新调用新的函数
say(10)

这里写图片描述
3.使用@符号将装饰器应用到函数

def outer(func):
    def inner(age):
        if age < 0:
            age = 0
        func(age)
    return inner
# 得到一个装饰过的函数
#say = outer(say)
# 要想执行函数,我们还得重新调用新的函数
#say(10)

# 使用@符号将装饰器应用到函数
@outer
# @outer等于say = outer(say)
def say(age):
    print 'man is %d years old' %age
say(-10)

这里写图片描述
这里写图片描述
4.在函数前后都加一道分割线

def outer(func_03):
    def inner():
        print '#############'
        func_03()
        print '$$$$$$$$$$$$$'
    return inner

@outer
def func_03():
    print 'func_03'
func_03()

这里写图片描述
这里写图片描述

def outer(func):
    def inner(*args):
        print '##############################'
        func(*args)
    return inner
@outer
def say(name,age):
    print 'my name is %s, I am %d years old' %(name,age)
say('dmf',18)

这里写图片描述
这里写图片描述

def outer(fun):
    def inner(arg):
        print '验证信息'
        result = fun(arg)
        print '###########'
        return result
    return inner
@outer
def fun1(arg):
    print 'fun1',arg
    print '$$$$$$$$$$$$$'
    return 'return'
response = fun1('westos')
print response

这里写图片描述
这里写图片描述


四、列表

# 修改列表元素
motorcysles = ['honda','suzuki','yamaha']
print motorcysles
motorcysles[0] = 'bmw'
print motorcysles

# 添加列表元素(默认添加在最后)
print motorcysles
motorcysles.append('bmw')
print motorcysles

motorcysles = []   ##建立一个空列表
print motorcysles
motorcysles.append('honda')    ##添加元素
motorcysles.append('suzuki')
motorcysles.append('yamaha')
print motorcysles

# 增加列表元素,在指定位置插入指定元素
num = [1,2,3,4,5,6,7,8]
num.insert(3,'five')
print num

# 把另外一个列表的完整内容追加到当前列表的末尾
motorcysles = ['honda','suzuki','yamaha']
num = [1,2,3,4,5,6,7,8]
motorcysles.extend(num)
print motorcysles

# del:关键字,本质上是将一个变量从内存中删除(尽可能不要去用)
motorcysles = ['honda','suzuki','yamaha']
del motorcysles[1]
print motorcysles

# pop:将列表最后一个元素弹出(后进先出)
motorcysles = ['honda','suzuki','yamaha']
print motorcysles
pop = motorcysles.pop()
print pop

#remove:删除
motorcysles = ['honda','suzuki','yamaha']
motorcysles.remove('honda')
print motorcysles

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

cars = ['bmw','audi','toyoto','subaru']
# len:获得列表的长度
print len(cars)

cars = ['bmw','audi','toyoto','subaru','bmw']
# len:获得列表的长度
# print len(cars)
# count:可以统计列表中某一个元素出现的次数
print cars.count('bmw')

cars = ['bmw','audi','toyoto','subaru','bmw']
print cars.count('bmw')
# remove:默认删除列表中出现的第一个元素,此元素在列表中不唯一
cars.remove('bmw')
print cars

这里写图片描述
这里写图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值