Python学习之函数

0) 引论

函数是实现代码复用的主要途径之一,而且函数的使用也可以使得程序更加容易理解,更加规范化。程序很多时候并不是给计算机的,而是给人看的。这里总结一下Python中的函数的应用

1) 函数

首先Python中的函数的格式是怎样的。

def 函数名(形参):
    函数体

下面是一个计算fibonacci数列的函数的定义:

def fibs(num):
    result=[0,1]
    for i in range(num-2):
        result.append(result[-2]+result[-1])
    return result

在函数中也可以加入一些说明文字,这里可以不需要利用‘#’注释,而直接在函数中加上字符串表示说明。

def fibs(num):
    'calculate Fibonacci numbers'
    result=[0,1]
    for i in range(num-2):
        result.append(result[-2]+result[-1])
    return result

如果需要查看字符串说明,则可以用下面的命令

函数名.__doc__(注意是双下划线)

>>> fibs.__doc__
'calculate Fibonacci numbers'

2) 函数的形参与实参

形参和实参是什么意思就不介绍了,没多大意思,主要是看几个例子。

>>> def try_to_change(n):
	n='Arsharm'

	
>>> m = 'Bob'
>>> try_to_change(m)
>>> m
'Bob'

这里我们可以看到n是形参,m是实参,当把m送入到函数中时,并不能改变实参的值。这是因为在这个过程中,它们有个作用域的改变,当将m送入到函数中时,相当于在一个新的作用域内重新创建了一个m。不同作用域中的相同的变量并不是一个变量,只不过它们的名字是一样的罢了。

那么如果我们一定要改变实参m的值呢? 这里可以用列表。相应的函数也要做一些改变

>>> def try_to_change(n):
	n[0]='Arsharm'

	
>>> m=['Bob']
>>> try_to_change(m)
>>> m
['Arsharm']

可以看到把变量换成列表的形式就可以了。这个和C语言中的规则是一样的。变量和C语言中的变量的规则一样,列表对应着C语言中的数组和指针。


3) 不确定数目参数的处理

函数中参数的变化还是很多的,例如我们可以给函数提供一些默认的参数

>>> def hello(greeting='Hello',name='World'):
    print(greeting+' '+name+'!')

    
>>> hello()
Hello World!
>>> hello('hey','Judd')
hey Judd!
>>> hello(greeting='hey')
hey World!

可以看出利用上面的方式提供参数,有若干个好处,一是能够提示参数的顺序以及使参数的意义更加明晰,二是可以在不输入参数的情况下,输出一个默认的参数,不至于出错。三是可以输入部分参数,默认部分参数,提高效率。


4) ‘*’和‘**’符号的作用

‘*’可以把所有的参数放到一个元组里

>>> def print_para(*para):
    print(para)

    
>>> print_para(1,2,3)
(1, 2, 3)
>>> print_para('hello')
('hello',)

“**”可以把所有的参数放到一个字典里

>>> def print_para(**para):
    print(para)

    
>>> print_para(x=1,y=2,z=3)
{'y': 2, 'x': 1, 'z': 3}
既然是字典,那么必然要有键和值,如上所示。


“*”与“**”这两个符号可以用在不知道有几个参数的情况下,这种情况很常见。

>>> def print_para(*param,**para):
    print(para)
    print(param)

    
>>> print_para(1,2,3,x=1,y=4)
{'y': 4, 'x': 1}
(1, 2, 3)

同时“*”与“**”这两个符号还可以反转使用,即把元组和字典转换回来变为值

>>> para = (1,2)
>>> add(*para)
3

>>> para = {'y': 4, 'x': 1}
>>> def add(x=1,y=2):
	return x+y


>>> add(**para)
5



5) 全局变量

全局变量比较简单,在变量前面加上global就可以了。但是一般还是不要用了吧,容易出错,而且关键是还不容易找到错误在哪里。

>>> m=15
>>> def try_to_change():
	global m
	m -= 3

	
>>> m
15
>>> try_to_change()
>>> m
12

6) 写一个二分查找的函数程序

sequence=[3,2,5,8,10,9,79]

def bin_search(sequence,number,upper,lower):
    sequence.sort()
    middle = (upper+lower)//2
    if sequence[middle]==number:
        print('Find it!')
    elif upper-lower==0:
        print('Not Find!')
    elif sequence[middle]<number:
        bin_search(sequence,number,upper,middle+1)
    elif sequence[middle]>number:
        bin_search(sequence,number,middle,lower)

bin_search(sequence,11,7,0)










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值