def 函数名():? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ?函数体? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ?return? 返回值? ? ? ? ? ? ? ? ? ? ? ? ? ?
def 函数名(非可选参数,可选参数):
?函数体?
??return 返回值
def 函数名(参数,*b):
? ? ? 函数体
? ? ? return 返回值
函数名 = lambda 参数 : 表达式
例1:f = lambda x , y? :? x + y? ? ? ? ? ? ? ? ? ? ? ?
调用:?print(f())? ? 输出: 没有参数的lambda函数!
用type(),就可以查他是什么类型的
def?test(self):
type(test)
type?'function'
type(a)
type?'int'
type(b)
type?'str'
type(c)
type?'float'
如果是函数,可以用dir(该函数名),还可以显示函数的方法使用方法
刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个*和**让人有点费解.其实只要把函数参数定义搞清楚了,就不难理解了.
先说说函数定义,我们都知道,下面的代码定义了一个函数funcA
def funcA():
pass
显然,函数funcA没有参数(同时啥也不干:D).
下面这个函数funcB就有两个参数了,
def funcB(a, b):
print a
print b
①.00
很明显,参数的顺序和个数要和函数定义中一致,如果执行funcB(100),Python会报错的:
我们可以在函数定义中使用参数默认值,比如
def funcC(a, b=0):
在函数funcC的定义中,参数b有默认值,是一个可选参数,如果我们调用funcC(100),b会自动赋值为0.
OK,目前为止,我们要定义一个函数的时候,必须要预先定义这个函数需要多少个参数(或者说可以接受多少个参数).一般情况下这是没问题的,但是也有在定义函数的时候,不能知道参数个数的情况(想一想C语言里的printf函数),在Python里,带*的参数就是用来接受可变数量参数的.看一个例子
def funcD(a, b, *c):
print "length of c is: %d " % len(c)
print c
好了,一颗星我们弄清楚了,下面轮到两颗星.
和
另外,在函数调用中,可以混合使用基于位置匹配的参数和关键字参数,前题是先给出固定位置的参数,比如
def funcE(a, b, c):
好了,经过以上铺垫,两颗星总算可以出场了:
如果一个函数定义中的最后一个形参有 ** (双星号)前缀,所有正常形参之外的其他的关键字参数都将被放置在一个字典中传递给函数,比如:
def funcF(a, **b):
for x in b:
print x + ": " + str(b[x])
c: 土嘎嘎的粉丝们大家好
大家可以看到,b是一个dict对象实例,它接受了关键字参数b和c.
楼上说的很好,初学小白的我也想到了同样的问题.按照楼上的提示我搜索了不可变对象与可变对象,参考该篇博文摘取部分网页链接网页链接
python中,对象分为可变(mutable)和不可变(immutable)两种类型,元组(tuple)、数值型(number)、字符串(string)均为不可变对象,而字典型(dictionary)和列表型(list)的对象是可变对象.
所谓可变对象是所谓可变对象是指,对象的内容可变,而不可变对象是指对象内容不可变.
题目中l是列表变量,为可变变量,每次调用函数可以改变该对象的内容;而题中的s为字符串变量,是不可变对象,调用了字符串操作函数lstrip()只会生成一个拷贝,对拷贝去除空格,而变量s本身不发生改变.