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

简介:

多类型传值和冗余参数

函数的参数有形参和实参,我们可以传递多种类型的实参,称为多类型传值,如下:
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)
1
(2, 3, 4)
{'y': 5, 'z': 6}

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

函数的递归调用

满足条件

必须有最后的默认结果
        if n == 0
递归参数必须向默认结果收敛的:
        factorial(n-1)

递归调用即在定义函数的时候,在函数内部再调用自己,也就是函数自己调用自己,通常用于计算阶乘
注意一点的是,如果函数一直调用自己,那就成了死循环了,因此我们通常会设一个条件,当条件为假时函数就终止了

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


In [45]: def fun(n):
    ...:     if n==0:
    ...:        return 1
    ...:     else:
    ...:         return n*fun(n-1)

In [46]: fun(3)
Out[46]: 6

相加时,当n=0时,返回为0,6 = 6+5+4+3+2+1+0

In [48]: def fun(n):
    ...:     if n==0:
    ...:        return 0
    ...:     else:
    ...:         return n + fun(n-1)

In [49]: fun(100)
Out[49]: 5050

打印目录下所有文件:
方法:
判断是否是目录或者文件

In [54]: os.path.isdir('/proc/')
Out[54]: True

In [55]: os.path.isdir('/a')
Out[55]: False

In [56]: os.path.isfile('/etc/passwd')
Out[56]: True

In [57]: os.path.join('/etc','aaa','bbb')         #不管这个路径存不存在,都连接在一起
Out[57]: '/etc/aaa/bbb'

列出目录下所有的文件和目录
多类型传值和冗余参数 、函数的递归调用

以下两个一个意思,都是加到列表里
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个












本文转自方向对了,就不怕路远了!51CTO博客,原文链接:http://blog.51cto.com/jacksoner/2057449 ,如需转载请自行联系原作者


相关文章
|
6月前
|
前端开发
9 # 实现链式调用里普通值处理
9 # 实现链式调用里普通值处理
18 0
C4.
|
1月前
|
Serverless C语言
C语言函数的嵌套调用
C语言函数的嵌套调用
C4.
23 0
|
7月前
|
C++ Python
Python函数参数传递:传值还是传引用
Python函数参数传递:传值还是传引用
38 0
|
9月前
|
机器学习/深度学习 Java
Java方法的嵌套与递归调用
Java方法的嵌套与递归调用
151 0
|
10月前
我应该使用按值调用还是按引用调用?
我应该使用按值调用还是按引用调用?
|
C语言
函数传址调用的基本解析
函数传址调用的基本解析
88 0
函数传址调用的基本解析
|
JavaScript 前端开发
特殊函数:匿名函数的两种应用(①回调函数②自调函数)
特殊函数:匿名函数的两种应用(①回调函数②自调函数)
105 0
特殊函数:匿名函数的两种应用(①回调函数②自调函数)
|
编译器
传递数组给函数
传递数组给函数
75 0
|
编译器 C++
C++关于参数是对象时要调用拷贝构造函数进行传参的问题探讨
C++关于参数是对象时要调用拷贝构造函数进行传参的问题探讨
231 0
|
C++ 索引
C++ 在函数中使用静态局部变量,让函数返回数组
C++ 在函数中使用静态局部变量,让函数返回数组
216 0
C++ 在函数中使用静态局部变量,让函数返回数组