Python的函数

原创 2015年07月07日 16:49:27

Python的函数

定义函数

def function_name(param, param, ...):
    function_suite
    return [expression]

or

def function_name(param, param, ...):
    pass

变量作用域

局部变量 / 全局变量:

定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。

传参方式=按引用传递参数

参数在Python里都是按引用传递(而不是按值传递)。

# coding=utf-8
__author__ = 'zyt'


def modify_num_value(x):
    print 'inner1:', x, id(x)
    x = 10
    print 'inner2:', x, id(x)
    return


def modify_list_value(x):
    print 'inner3:', x, id(x)
    x[2] = 100
    print 'inner4:', x, id(x)
    return


a = 1
print 'main1:', a, id(a)
modify_num_value(a)
print 'main2:', a, id(a)

b = [1, 2, 3, 4, 5]
print 'main3:', b, id(b)
modify_list_value(b)
print 'main4:', b, id(b)



运行结果:
main1: 1 34209536
inner1: 1 34209536
inner2: 10 34209428
main2: 1 34209536
main3: [1, 2, 3, 4, 5] 41602784
inner3: [1, 2, 3, 4, 5] 41602784
inner4: [1, 2, 100, 4, 5] 41602784
main4: [1, 2, 100, 4, 5] 41602784

参数传入

# coding=utf-8
__author__ = 'zyt'


def my_function(name, age, height=180):
    print "name:", name
    print 'age:', age
    print 'height:', height  # 缺省参数
    print '------'
    return


my_function(age=20, name='Jack')  # 命名参数的顺序已不再重要
my_function('Peter', 25, 175)  # 参数默认按位置顺序传入



运行结果:
name: Jack
age: 20
height: 180
------
name: Peter
age: 25
height: 175
------
  • 使用缺省参数时的注意:

先看下面代码:

# coding=utf-8
__author__ = 'zyt'


def my_add_end(L=[]):  # 使用缺省参数
    L.append('end')
    # print 'inner:', L
    return L


a = ['hello', 'world']
print 'main1:', a
print 'main2:', my_add_end(a)
print 'main3:', my_add_end(a)

print 'main4:', my_add_end()
print 'main5:', my_add_end()
print 'main6:', my_add_end()



运行结果:
main1: ['hello', 'world']
main2: ['hello', 'world', 'end']
main3: ['hello', 'world', 'end', 'end']
main4: ['end']
main5: ['end', 'end']
main6: ['end', 'end', 'end']

看到上面运行结果中,main5、main6结果并不是预期中的只有一个['end']
这是因为,在函数被定义的时候,默认参数L的值就被计算出来了,即指向[]这个对象,那么当调用该函数时,如果改变了L的内容,则下次调用时,就不再是[]了,而是改变后的内容。所以,定义缺省参数时要注意:缺省参数指向不变对象!避免无意中改变对象内容。

对上面程序修改,使用None不变对象:

def my_add_end(L=None):
    if L is None:
        L = []
    L.append('end')
    # print 'inner:', L
    return L

......



运行结果:
main1: ['hello', 'world']
main2: ['hello', 'world', 'end']
main3: ['hello', 'world', 'end', 'end']
main4: ['end']
main5: ['end']
main6: ['end']

匿名函数(lambda)

偏函数

The partial() is used for partial function application which “freezes” some portion of a function’s arguments and/or keywords resulting in a new object with a simplified signature.
参考库模块functools

# coding=utf-8
__author__ = 'zyt'

import functools

int2to10 = functools.partial(int, base=2)
int16to10 = functools.partial(int, base=16)

print int2to10('1010')
print int16to10('E')
print int('B', base=16)


运行结果:
10
14
11

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

python 3.4 chm api 函数手册

  • 2015-01-19 16:43
  • 7.02MB
  • 下载

[python 笔记3]函数(方法?)

1、定义     python函数以关键字def标识 def test(name): print 'hello %s'%(name) name=raw_input('please...

python函数中文手册

  • 2015-07-30 11:19
  • 325KB
  • 下载

selenium中python常用函数

python中排序,函数sort、sorted、argsort,collections.OrderedDict类

# python中排序,函数sort、sorted、argsort,collections.OrderedDict类 内建函数:sort、sorted numpy:argsort collection...

关于python 中的 urlretrieve() 函数

下面我们再来看看 urllib 模块提供的 urlretrieve() 函数。urlretrieve() 方法直接将远程数据下载到本地。 1 >>> help(...

python常用函数

  • 2014-06-08 21:06
  • 126KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)