Python学习笔记(六)——函数

来源:互联网 发布:鼎尖软件安卓版 编辑:程序博客网 时间:2024/05/29 12:14

函数定义语法:

def functionname( parameters ):   "函数_文档字符串"   function_suite   return [expression]

参数传递

可变&不可变参数

在python中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。
python 中一切都是对象,严格意义我们不能说是C++中的值传递还是引用传递,我们应该说传不可变对象和传可变对象。

def changeme(mylist):    mylist.append([1,2,3,4]);    print "函数内取值: ", mylist    return# 调用changeme函数mylist = [10,20,30];changeme(mylist);print "函数外取值: ", mylistdef changeNum(b):    b+=1a=1changeNum(a)print a

输出结果如下:

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

参数类型

以下是调用函数时可使用的正式参数类型:

必备参数

必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。

关键字参数

关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

def print_name(first_name, last_name):    print "My name is ", first_name, " ", last_nameprint_name(last_name="Ming", first_name="Xiao")
默认参数
def printinfo( name, age = 35 ):   "打印任何传入的字符串"   print "Name: ", name;   print "Age ", age;   return;#调用printinfo函数printinfo( age=50, name="miki" );printinfo( name="miki" );

输出结果:

Name:  mikiAge  50Name:  mikiAge  35
不定长参数

你可能需要一个函数能处理比当初声明时更多的参数。加星号(*)的变量名会存放所有未命名的变量参数。其实就是用带星号(*)变量以列表形式把不定长的参数保存起来。

# 可写函数说明def printinfo( arg1, *vartuple ):   "打印任何传入的参数"   print "输出: "   print arg1   for var in vartuple:      print var   return;# 调用printinfo 函数printinfo( 10 );printinfo( 70, 60, 50 );

输出结果:

输出:10输出:706050
不定长关键字参数

当参数前加两个星号(**)时,该参数为不定长关键字参数,即支持任意多的关键字参数。

def accept(**kwargs):    for keyword, value in kwargs.items():    print "%s => %r" % (keyword, value)accept(foo='bar', spam='eggs')

输出:

foo => 'bar'spam => 'eggs'

匿名函数

python 使用 lambda 来创建匿名函数。
lambda只是一个表达式,函数体比def简单很多。
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
语法:

lambda [arg1 [,arg2,.....argn]]:expression

如下实例:

# 两参数求和sum = lambda arg1, arg2: arg1 + arg2;#调用sum函数print "相加后的值为 : ", sum( 10, 20 )

全局变量和局部变量

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

globvar = 0def set_globvar_to_one():    global globvar    # 使用 global 声明全局变量    globvar = 1def print_globvar():    print(globvar)     # 没有使用 globalset_globvar_to_one()print  globvar        # 输出 1print_globvar()       # 输出 1,函数内的 globvar 已经是全局变量

Function与Method的区别

https://docs.python.org/3/glossary.html
What’s function?
A series of statements which returns some value to a caller. It can also be passed zero or more arguments which may be used in the execution of the body.
What’s method?
A function which is defined inside a class body. If called as an attribute of an instance of that class, the method will get the instance object as its first argument (which is usually called self).

简单来说就是:方法是定义在类里面的函数。