天天看点

多类型传值和冗余参数 、函数的递归调用

函数的参数有形参和实参,我们可以传递多种类型的实参,称为多类型传值,如下:

In [13]: def add(x,y):

...: return x+ y

...: 

In [14]: add(3,4)

Out[14]: 7

In [15]: t=(1, 2)

In [16]: add(*t) #可以传递一个元组

Out[16]: 3

In [17]: d={'x':10, 'y':20}

In [18]: add(**d) #可以传递一个字典,当函数定义的是x,y,字典的key必须是x,y

Out[18]: 30

In [21]: d={'x':'a', 'y':'b'}

In [22]: add(**d)

Out[22]: 'ab'

也可以这样导入:

In [29]: def fun(a,b,*c):

...: print a

...: print b

...: print c

...:

冗余参数:

在定义函数的时候,假设我们定义了三个形参,那么我们就得传递三个实参,当我们定义一个没有具体数量的形参时,我们可以采用 def fun(x, *args, **kwargs) 这种形式来定义,这样我们在传递实参的时候就不会受限制了

In [30]: fun(1,2,3,4,5,6,7,8,9)

1

2

(3, 4, 5, 6, 7, 8, 9)

In [37]: fun(1, 2, 3, 4, y=5,z=6)

(2, 3, 4)

{'y': 5, 'z': 6}

多类型传值和冗余参数 、函数的递归调用

满足条件

递归调用即在定义函数的时候,在函数内部再调用自己,也就是函数自己调用自己,通常用于计算阶乘

注意一点的是,如果函数一直调用自己,那就成了死循环了,因此我们通常会设一个条件,当条件为假时函数就终止了

当n=0时,返回为1,例如6=321

打印目录下所有文件:

方法:

判断是否是目录或者文件

列出目录下所有的文件和目录

多类型传值和冗余参数 、函数的递归调用

以下两个一个意思,都是加到列表里

list1=list()

for i in range(0,10):

if i !=5:

list1.append(i)

list2=[i for i in range(0,10) if i!=5]

import sys

def print_file(path):

lsdir=os.listdir(path) #将目录下的文件及文件夹都打印出来

dirs=[i for i in lsdir if os.path.isdir(os.path.join(path,i))] #遍历若是目录则打印出来,放在一个列表

files=[i for i in lsdir if os.path.isfile(os.path.join(path,i))]#遍历若是文件则打印出来,放在一个列表

if files: #若是文件存在

for f in files:

print os.path.join(path,f)

if dirs: #若是目录存在

for d in dirs:

print_file(os.path.join(path,d)) #需要指定绝对路径

print_file(sys.argv[1])#脚本后面需要跟一个参数,若是2,则需要2个

本文转自 iekegz 51CTO博客,原文链接:http://blog.51cto.com/jacksoner/2057449,如需转载请自行联系原作者