Python快速学习第五天

第五天:抽象

1、    函数

检测函数是否可调用:callable

>>> import math

>>> y=math.sqrt

>>> callable(y)

True

>>> x=1

>>> callable(x)

False

   注意:Python3.0不在支持callable,需要使用表达式hasattr(func,_call_call_)代替

   创建函数:def functionname(params):

>>>def fibs(num):

...     'Get fibonaqi sequnce! '

...     result=[0,1]

...     for i in range(num-2):

...            result.append(result[-2]+result[-1])

...     return result

...

>>>fibs(10)

[0, 1,1, 2, 3, 5, 8, 13, 21, 34]

 

用于def后面的'Getfibonaqi sequnce! '添加文档字符串,相当于注释#,使用help()可以查询函数的文档字符串

help(fibs)

Help on function fibs in module __main__:

 

fibs(num)

    Getfibonaqi sequnce!

...skipping...

Help on function fibs in module __main__:

 

fibs(num)

    Getfibonaqi sequnce!

 

 return后不加值,只表示函数的结束,而没有返回值,这样可以避免应该返回序列时,意外返回None

>>> def test():

...     print 'tanggao'

...     return

...     print 'tanggao isgood'

...

>>> x=test()

tanggao

>>> print x

None

 

2、   参数对外部变量影响

   函数内给参数赋值,不会改变外部变量的值,参数存储在局部作用域中

>>> def try_to_change(n):

...     n=3

...

>>> t=4

>>> try_to_change(t)#虽然在函数内部重新赋值,但外部不变

>>> t

4

 

但是对于可改变的数据结构,如列表,参数的内部赋值会改变外部变量的值

   内部参数与外部变量指向同一个列表,所以会被修改

   若不想改变外部列表,可以传进一个副本

>>> def change(n):

...    n[0]='tanggao'

...

>>> names=['hello','world']

>>> change(names)

>>> names

['tanggao', 'world']

>>>  #采用普通方法进行模拟 

...

>>> names=['hello','world']

>>> n=names

>>> n[0]='tanggao'

>>> names

['tanggao', 'world']

 

 

完整示例——存储名字,并能用名字、中间名或姓来查找联系人

   若名字为'MagusLie Hetland'存储格式类似

   data = {

           'first':{ 'Magus': 'Magus Lie Hetland'},

           'middle':{'Lie': 'Magus Lie Hetland'},

           'last':{'Hetland': 'Magus Lie Hetland'}

       }

   注意insert(index,value)函数,在列表的索引位置插入值

Python代码  

1.  >>> def init(data):  #data作为存储表,初始化  

2.      data['first'] = {}  

3.      data['middle'] = {}  

4.      data['last'] = {}  

5.    

6.  >>> def store(data, full_name): #存储,将全名存储到表中  

7.      names = full_name.split()  #将名字按空格(即first,middle,last)分开,返回列表,如'Ma Li He'返回['Ma', 'Li', 'He']  

8.      if len(names) == 2: names.insert(1, '')#若无中间名,则插入空来表示中间名['Mr', 'Zha']返回['Mr', '', 'Zha']  

9.      labels = 'first''middle''last'  #元组  

10.     for label, name in zip(labels, names):  #元组与序列间也可使用zip  

11.         people = lookup(data, label, name)  

12.         if people:  

13.             people.append(full_name)  

14.         else:  

15.             data[label][name] = [full_name] #当键不存在时,自动添加键值对,  

16.                                                                          #但如果输出不存在键对应值,则报错  

17.   

18. >>> def lookup(data, label, name): #查找,根据label查找是name的中间人  

19.     return data[label].get(name)  

20.   

21.               

22. >>> MyNames = {}  

23. >>> init(MyNames)  

24. >>> store(MyNames, 'Magnus Lie Hetland')  

25. >>> lookup(MyNames, 'middle''Lie')  

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值