609 views
Python开发

Python第12天 函数传值与递归调用

文章目录

2018-11-28 10:48:40

1.6 多类型传值和冗余参数

多类型传值

def fun(x,y,z):
    return x+y+z
t = (2,3)
dic = {'x':1,'y':2,'z':3} 
fun(1,*t) # *会将t里面所有的值当做参数传递到函数中,实参个数一定要与函数个数一致
fun(*(2,3,4))
fun(**dic) #调用字典需要用**,而且字典的key要与函数形参一致
------------结果如下-------------------
6
9
6
---------------错误调用如下------------
fun(t)
fun(*t,1)

冗余参数

  • 向函数传元组和字典
  • 处理多余实参
def fun(x,*args,**kwargs)
    print x
    print args
    print kwargs
    
t = (1,2)
fun(1,2,'a',[1,2],*t,a=3,**{'b':4})
注:
在函数fun中,x是命名参数,调用时第一个值就是x;
            *args是冗余参数,数字、字符串,列表、元组都属于*args;
            **kwargs也是冗余参数,但它只字典表的值
------------------结果如下------------------
1
(2,'a',[1,2],1,2)
{'a':3,'b':4}

1.7 函数的递归调用

  • 递归必须要有最后的默认结果 if n ==0
  • 递归参数必须想默认结果收敛 factorial(n-1) 一直调用自己如果不收敛就是死循环了

计算阶层

---------------普通方法--------------
def factorial(n):
    sum = 1
    for i in range(1,n+1)
        sum *=i
    return sum
print factorial(5) ----> 120
---------------递归方法(自己调用自己)--------------
def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)
print factorial(5) ----> 120

用递归的方法打印目录下的所有文件名

-------------------方法1----------------------
#!/usr/bin/env python
#coding:utf8 
import os
import sys

def listdir(n):
    lsdir = os.listdir(n)
    for i in lsdir:
        if os.path.isfile(os.path.join(n,i)):
            print os.path.join(n,i)
        else:
            listdir(os.path.join(n,i))
listdir(sys.argv[1])
-------------------方法2----------------------
#!/usr/bin/env python
#coding:utf8
import os
import sys

def print_file(path):
    lsdir = os.listdir(path)
    files = [ i for i in lsdir if os.path.isfile(os.path.join(path,i)) ] #判断是否是文件
    dicts = [ i for i in lsdir if os.path.isdir(os.path.join(path,i)) ]  #判断是否是目录
    if files: #是文件就直接打印
        for i in files:
            print os.path.join(path,i)
    if dicts: #是目录,调用print_file函数本身,继续循环
        for f in dicts:
            print_file(os.path.join(path,f))
print_file(sys.argv[1])
--------------------解析--------------------
os.path.isdir()
 - 判断后面的文件是否是目录,是的话返回True(不能判断目录是否存在,不存在也会返回false)
os.path.isfile()
 - 判断后面的文件是否是文件,是的话返回True(不能判断文件是否存在,不存在也会返回false)
os.path.join()
 - 连接括号中的路径(文件)
 - os.path.join('/etc/','passwd','abc') ----> /etc/passwd/abc

Leave a Reply

影子专属博客 赣ICP备17013143号