自定义函数
def 函数名(参数):
函数体
return
例如:
def mul(x):
return x*x
y=mul(5)
print(y)
输出:
25
注意:严格缩进
1、给函数编写文档
放在函数开头的字符串成为文档字符串
例如:
def mul(x):
'Hollew World'
return x*x
y=mul(5)
print(y)
print(mul.__doc__)
输出:
25
Hollew World
注意:
1、访问方式:函数名,__doc__
2、__doc__是函数的一个属性,双下划线表示为特殊属性
2、函数的可修改与不可修改
给出例子:
def x_change(x):
x='Mr.G'
def y_change(y):
y[0]='Mrs.G'
xs="Mrs.XA"
x_change(xs)
print(xs)
ys=["Mr.YA","Mrs.YS"]
y_change(ys)
print(ys)
输出:
Mrs.XA
['Mrs.G', 'Mrs.YS']
你会发现x没有被改变,y被改变了。
这是因为x_change(x)只是给局部变量x赋了一个值,改变了x的值,为改变xs的值;而y_change(y)中修改了变量关联的ys。
这是因为将一个列表付给两个变量时,两个变量都指向这个列表,修改其一就都修改了。
为了避免这种情况,应该为对序列进行切片操作,返回副本!!!
例1:
def y_change(y):
y[0]='Mrs.G'
ys=["Mr.YA","Mrs.YS"]
ys2=ys[:]
print(ys2)
y_change(ys2)
print(ys)
print(ys2)
输出:
['Mr.YA', 'Mrs.YS']
['Mr.YA', 'Mrs.YS']
['Mrs.G', 'Mrs.YS']
例2:
def y_change(y):
y[0]='Mrs.G'
ys=["Mr.YA","Mrs.YS"]
y_change(ys[:])
print(ys)
输出:
['Mr.YA', 'Mrs.YS']
你会发现ys没有改变,ys2改变了!!
这是因为ys与ys2相同,但不是同一个变量!!
如果想要修改:
1、利用返回值
def x_change(x):
x='Mrs.G'
return x
x="Mr.YA"
x=x_change(x)
print(x)
输出:
Mrs.G
可见修改成功!!
2、将值放到可修改的列表中
def x_change(x):
x[0]='Mrs.G'
return x
x=["Mr.YA"]
x=x_change(x)
print(x)
['Mrs.G']
3、关键字参数和默认值
例如:
def Hello(name,greeting="Hi",str="!"):
print("{},{}{}".format(greeting,name,str))
Hello("Alice")
输出:
Hi,Alice!
与上面比较:
def Hello(name,greeting="Hi",str="!"):
print("{},{}{}".format(greeting,name,str))
Hello("Alice",'Hello')
输出:
Hello,Alice!
4、收集参数
允许用户提供任意个参数!!
例如:
def name(*pname):
print(pname)
name("Alice")
name('Alice','wang','MingYi')
输出:
('Alice',)
('Alice', 'wang', 'MingYi')
注意输出格式:元组!!
def Add(x,*y,z):
print(x,y,z)
Add(1,4,5,6,7,8,9,z=2)
输出:
1 (4, 5, 6, 7, 8, 9) 2
注意:当*y后还有参数时一定要对*后的参数进行说明——z=2!!!