基于linux下python学习(函数、引用、装饰器)

函数

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

务的函数,让python运行其中的代码,你将发现,通过使用函数,程序编写,阅读,测试

修复都将更容易

1.定义函数

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

参数的作用
函数,把具有独立功能的代码块组织成为一个小模块,在需要的时候调用
函数的参数,增加函数的通用性,针对相同的数据处理逻辑,能够适应更多的数据
        1.在函数内部,把参数当作变量使用,进行需要的数据处理
        2.函数调用时,按照函数定义的参数顺序,把希望在函数内部处理的数据,通过

def say_hello():
    print 'hello python'
say_hello()

参数传递
形参和实参

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

# 3.

def sum_2_sum(num1,num2):
    result = num1 + num2
    print result
sum_2_sum(2,8)
# 4.
def sum_2_sum(*n):
    print n
sum_2_sum(2,8,10)

函数的返回值

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

# 5.return 表示返回,后续代码不会执行
def sum_2_sum(num1,num2):
    result = num1+num2
    return result
sum_result = sum_2_sum(2,8)
print sum_result


局部变量和全局变量

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

局部变量
局部变量是在函数内部定义的变量,只能在函数内部使用
函数执行结束后,函数内部的局部变量,会被系统回收
不同的函数,可以定义相同的名字的局部变量,但是各用各的不会产生影响

局部变量的作用
在函数内部使用,临时保存函数内部需要使用的数据

def demo1():

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

# 不同的函数,可以定义相同名字的局部变量,不会产生影响
def demo1():
    num = 10
    print num
def  demo2():
    num = 20
    print num
demo1()
demo2()

num = 10
def demo1():
    num = 20
    print '%d'%num
def demo2():
    print '%d'%num
demo1()
demo2()

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

gl_num = 10
def demon1():
    num = 99
    print num
    print gl_num
def demon2():
    print gl_num
demon1()
demon2()

变量进阶引用

变量的引用
可变和不可变类型
局部变量和全局变量

变量的引用
        变量和数据都是保存在内存中的
        在python中函数的参数传递以及返回值都是靠引用传递的

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

def test(num):
    print '在函数内部%d对应的内存地址为%d'%(num,id(num))
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))

装饰器

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

def func1():
    print 'hello,hello'
def func2():
    print 'westos,westos'
#需求:让func1函数的执行结果前面加一串*
#不改变原函数
#outer()就相当于一个化妆师
#将传递进来的参数化妆,然后返回化妆好了的函数
#这个为什么要有一个形参,因为化妆师可以给每个人化妆
def  outer(func):
    def inner():
        print '*'*10
        func()
    return inner
# return 返回的是一个函数
#f是func1的加强版本,其实就是inner()
f=outer(func1)
f()
x=outer(func2)
x()

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

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('lily',18)

def  outer(func):
    def inner():
        print '*'*10
        func()
        print '#'*10
    return inner
@outer
def func1():
    print 'hello,hello'
@outer
def func2():
    print 'westos,westos'
@outer
def func3():
    print 'hahaha'
func1()
func2()
func3()

def outer(fun):
    def inner():
        print 'hahaha'
        result = fun()
        print 'xxxxxx'
        return result
    return inner
@outer  #func1=outer(func1)
def func1():
    print 'func1'
    print '*****'
    return 'return'
xx= func1()
print xx

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值