python基础——函数编程
一、实验目的
掌握函数编程
二、实验原理
在Python中,定义函数的语法如下:
def 函数名([参数列表]):
‘’‘注解’’’
函数体
定义函数时,需要注意的问题:①函数形参不需要声明其类型,也不需要指定函数返回值类型,②即使该函数不需要接受任何参数,也必须保留一对空的圆括号,③括号后面的冒号必不可少④函数体相对于def关键字必须保持一定的空格缩进。
三、实验环境
Python 3.5以上
PyCharm
四、实验内容
函数编程
五、实验步骤
在Python中,定义函数时不需要声明函数的返回类型,而是使用return语句结束函数执行的同时返回任意类型的值,函数返回值类型与return语句返回表达式的类型一致。无论return语句出现在函数的什么位置,一旦得到执行将直接结束函数的执行。如果函数没有return语句或者执行不返回任何值的return语句,Python将认为该函数以return None结束,即返回空值。
1.下面的函数用来计算斐波那契数列中小于参数n的所有值。
#定义函数,括号里的n是形参
def fib(n):
#accept an in integer n. return the numbers less than n in Fibonacci sequence.
a,b=1,1
while a<n:
print(a,end=' ')
a,b=b,a+b
print()
#调用该函数的方式为:
fib(1000)
注意:在定义函数时,开头部分的注释并不是必须的,但是如果为函数的定义加上一段注释的话,可以为用户提供友好的提示和使用帮助。
2.在调用函数时,一定要注意函数有没有返回值,以及是否会对函数实参的值进行修改。
a_list=[1,2,3,4,9,5,7]
print(sorted(a_list))
#原列表内容没变
print(a_list)
#列表对象的sort()方法没有返回值
print(a_list.sort())
print(a_list)
3.拓展知识:函数属于可调用对象,由于构造函数的存在,类也是可以调用的。另外,任何包含__call__()方法的类的对象都是可调用的。
def linear(a,b):
#函数是可以嵌套定义的
def result(x):
return a*x+b
return result
下面代码演示了可调用对象类的定义
class Linear:
def __init__(self,a,b):
self.a,self.b=a,b
def __call__(self,x):
return self.a*x +self.b
使用上面的嵌套函数和类这两种方式中任何一个,都可以通过以下的方式来定义一个可调用的对象:
taxes=linear(0.3,2)
#然后通过下面的方式来调用该对象
taxes(5)
函数定义时,圆括号内是使用逗号分隔开的形参列表,一个函数可以没有参数,但是定义和调用时一对圆括号必须要有,表示这是一个函数并且不接受参数。函数调用时向其传递实参,根据不同的参数类型,将实参的值或引用传递给形参。
4.对于绝大多数情况,在函数内部直接修改形参的值不会影响实参。
def addOne(a):
print(a)
#得到新的变量
a+=1
print(a)
a=3
addOne(a)
print(a)
5.在一些特殊情况下,可以通过特殊的方式在函数内部修改实参的值。
#修改列表元素值
def modify(v):
v[0]=v[0]+1
a=[2]
modify(a)
print(a)
#为列表增加元素
def modify(v,item):
v.append(item)
a=[2]
modify(a,3)
print(a)
#修改字典元素值或字典增加元素
def modify(d):
d['age']=38
a={'name':'Dong','age':37,'sex':'Male'}
modify(a)
print(a)
6.调用含有多个参数的函数时,可以使用Python列表,元组、集合、字典以及其他可迭代对象作为实参,并在实参名称前加一个星号“*”,Python解释器将自动进行解包,然后传递给多个单变量形参。
def demo(a,b,c):
print(a+b+c)
#列表
seq=[1,2,3]
demo(*seq)
#元组
tup=(1,2,3)
demo(*tup)
#字典
dic={1:'a',2:'b',3:'c'}
demo(*dic)
#集合
Set={1,2,3}
demo(*Set)
注意:字典若想作为实参时默认使用字典的“键”,如果需要将字典中“键:值”元素作为参数则需要使用items()方法明确说明,如果需要将字典的“值”作为参数则需要调用字典的values()方法明确说明。
- 点赞
- 收藏
- 关注作者
评论(0)