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
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
---------------普通方法--------------
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