第六章 函数式编程

第六章 函数式编程

这部分个人认为作用域和命名空间那块讲的不是特别清楚。

1.阅读以下代码,解释[eval(‘lric_’+str(x)+’()’) for x in range(1,6)]命令含义。

>>> def lric_1():
	pass
>>> def lric_2():
	return
>>> def lric_3():
	return None
>>> def lric_4():
	return 4
>>> def lric_5():
	return 1,2,3,4,"5"
>>> [eval('lric_'+str(x)+'()') for x in range(1,6)]
#输出结果
>>>[None, None, None, 4, (1, 2, 3, 4, '5')]

分两段来看。

eval('lric_'+str(x)+'()')

是把字符串当作命令来执行。

 for x in range(1,6)

遍历1-5.那么结合起来看的话就是:调用前面定义的函数,并输出结果。

2.什么是docstring?它有什么样的特点和作用?

即放在函数定义开头的字符串。

def ric():
	'''just a function'''
	print('handsome')
#调用
>>> ric()
handsome
>>> help(ric) 
Help on function ric in module __main__:

ric()
    just a function  #在帮助文档中显示。

>>> 
>>> ric.__doc__
'just a function'
>>> ric.__doc__='JUST A FUNCTION' #修改
>>> ric.__doc__
'JUST A FUNCTION'
>>> help(ric)
Help on function ric in module __main__:

ric()
    JUST A FUNCTION

>>> 

特点:可以被直接修改
作用:其在help文档中可以显示函数定义时候的第一行字符串。

3.函数参数相关问题。

(1)位置参数和默认参数
在定义函数时没有被定义的参数。如以下一个函数:

def sale_car(price,color,brand,is_second_car):
    print('price:',price,
          'color:',color,
          'brand:',brand,
          'is_second_car:',is_second_car)
sale_car(1000,'white','Benz',True)

但输入这么多位置参数特别麻烦,加入有N个位置参数呢?这时候需要使用默认参数,默认参数最主要的功能是什么?设定默认值,即在不给出参数值的时候,使用函数定义时候的默认值
修改如下:把颜色、牌子、是否二手车改成默认值。

def sale_car(price,color='black',brand='BMW',is_second_car=True):
    print('price:',price,
          'color:',color,
          'brand:',brand,
          'is_second_car:',is_second_car)
sale_car(2000000)

注意:
使用默认参数时必须是不可变对象!否则在重复调用时候会出现以下现象。因为他们共享的是同一个列表(L)对象,只是每调用一次就往该列表中增加了一个元素。

 def ric(L=[]):
	L.append('a')
	print(L)
#输出
>>> ric()
['a']
>>> ric()
['a', 'a']

(2)任意参数
引入 :编写一个函数用于计算立方和,代码如下:

>>> def calc(numbers):
	sum=0
	for x in numbers:
		sum=sum+x**3
	return sum
#调用calc
>>> calc([1,2,3])
36

但是,这样定义的函数,在输入参数的时候必须要组装成一个list或者tuple才行,那么如何简化呢?*号了解一下!。修改如下:

>>>def calc(*numbers):
    sum=0
    for x in numbers:
        sum=sum+x**3
    return sum
#调用,随意输入
>>> calc(1,2,3)
36
>>> 

**(3)关键字参数 kw
类型是tuple。

>>>def food_analysis(name,age,**kw):
    print('name:',name,'age:',age,'other:',kw)
#调用
>>>food_analysis('ric',education_background='scholar',research_field='electrochemical')
#输出
>>>name: ric age: 23 other; {'education_background': 'scholar', 'research_field': 'electrochemical'}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值