07函数的定义

函数
形式参数parameter  定义参数是括号内字
实际参数argument   输入值

def myfx(name):
    '函数形式参数为name'
    #当前为注释内容
    print((name+'内容')*10)

1.运行函数
>>> myfx('测试')
测试内容 测试内容 测试内容 测试内容 测试内容 测试内容 测试内容 测试内容 测试内容

2.函数文档
>>> help(myfx)
Help on function myfx in module __main__:
myfx(name)    函数形式参数为name

3.关键字参数  防止参数位置搞错
>>> def saysome(name,words):
 print(name + '->' + words)

>>> saysome(words='宝宝心里苦',name='小明')
小明->宝宝心里苦
4.默认参数
 在函数定义的过程中,为形式参数赋值
#需要注意的是,多次调用函数并且不为默认值参数传递值时,默认值参数只在第一次调用时进行解释。对列表、字典这样复杂类型的默认值参数,这一点可能会导致很严重的逻辑错误。
 
5.收集参数(可变长度参数)
可变长度参数在定义函数时主要有两种形式:*parameter和**parameter,前者用来接收任意多个实参并将其放在一个元组中,后者接收类似于关键参数一样显式赋值形式的多个实参并将其放入字典中
>>> def test(*part,extra=3):
 print('参数长度是:',len(part))
 print('第二个参数是:',part[1])
 print('eztra=',extra)
>>> test(10,'大羊驼',7,8,99)
参数长度是: 5
第二个参数是: 大羊驼
eztra= 3
>>> test(10,'大羊驼',7,8,99,extra=98)
参数长度是: 5
第二个参数是: 大羊驼
eztra= 98

>>> def demo(**p):
 for item in p.items():
  print item
>>> demo(x=1,y=2,z=3)
('y', 2)
('x', 1)
('z', 3)

#几种不同类型的参数可以混合使用,但是不建议这样做
>>> def func_4(a,b,c=4,*aa,**bb):
 print (a,b,c)
 print aa
 print bb
>>> func_4(1,2,3,4,5,6,7,8,9,xx='1',yy='2',zz=3)
(1, 2, 3)
(4, 5, 6, 7, 8, 9)
{'yy': '2', 'xx': '1', 'zz': 3}
>>> func_4(1,2,3,4,5,6,7,xx='1',yy='2',zz=3)
(1, 2, 3)
(4, 5, 6, 7)
{'yy': '2', 'xx': '1', 'zz': 3}



6.参数传递的序列解包
传递参数时,可以通过在实参序列前加星号将其解包,然后传递给多个单变量形参。
>>> def demo(a,b,c):
 print a+b+c
>>> seq=[1,2,3]
>>> demo(*seq)
6

7.变量作用域
#不要在函数内部修改全局变量(Python会在函数内部创建一个与全局变量名字相同的局部变量来保护全局变量)
#如果局部变量与全局变量有相同的名字,那么该局部变量会在自己的作用域内隐藏同名的全局变量。
#在函数内定义的变量只在该函数内起作用,称为局部变量。
函数结束时,其局部变量被自动删除。

在函数内部一般不要试图修改全局变量,若要访问,可使用global关键字
>>> count = 5
>>> def myfun():
 global count
 count = 10
 print(count)
 
>>> myfun()
10
>>> print(count)
10
如果想要在函数内部给一个定义在函数外的变量赋值,那么这个变量就不能是局部的,其作用域必须为全局的,能够同时作用于函数内外,称为全局变量,可以通过global来定义。
(1)一个变量已在函数外定义,如果在函数内需要为这个变量赋值,并要将这个赋值结果反映到函数外,可以在函数内用global声明这个变量,将其定义为全局变量。
(2)在函数内部直接将一个变量声明为全局变量,在函数外没有声明,在调用这个函数之后,将增加为新的全局变量。
>>> def demo():
 global x
 x = 3
 y =4
 print x,y
>>> x = 5
>>> demo()
3  4
>>> x
3
>>> y
出错
NameError: name 'y' is not defined
>>> del x
>>> x
出错
NameError: name 'x' is not defined
>>> demo()
3  4
>>> x
3
>>> y
出错
NameError: name 'y' is not defined



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值