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相关函数

  • 2017年11月25日 21:50
  • 2KB
  • 下载

python内置函数大全

  • 2017年11月17日 21:43
  • 6.32MB
  • 下载

Python中map()函数用法-对列表中每个元素做相同操作,并返回list

MapReduce的设计灵感来自于函数式编程,这里不打算提MapReduce,就拿python中的map()函数来学习一下。 文档中的介绍在这里: map(function, iterable, .....
  • Alis_xt
  • Alis_xt
  • 2016年11月20日 12:04
  • 545

Python内置的字符串处理函数

  • 2014年05月17日 00:31
  • 3KB
  • 下载

python excel操作函数

  • 2017年04月09日 15:27
  • 5KB
  • 下载

Python3自定义key函数排序

Python2中的**自定义布尔函数cmp=custom_cmp(x, y)**由Python3中的**key=custom_key(x)**代替。 在python3中,待比较元素x通过custom...

Python--函数式编程

函数式编程就是一种抽象程度很高的编程范式。这个概念有些抽象,简单理解的话,只需要记住一点:函数式编程的一大特点是允许把函数本身作为参数传入另一个函数,还允许返回一个函数! Python并不是一种函数...

Python中的内置函数

  • 2009年06月09日 11:14
  • 203KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python的函数
举报原因:
原因补充:

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