Pythonで再帰関数呼び出し例and匿名関数lambda 1~100の和と計算階乗例を求める
1.ディレクトリ内のファイルを再帰的にリストするスクリプト例ディレクトリ内のファイルをリストするには、os.listdir()
ディレクトリかどうかを判断します.
ファイルかどうかを判断します.
ファイル名の絶対パス:
ディレクトリの下にあるすべてのファイルスクリプトをリストします.
2.匿名関数lambda
Lambda関数は、ラジオを迅速に定義する最小関数であり、関数が必要な場所で使用できます.
3*5実装方法:
匿名関数定義の場合:
匿名関数の利点:
1.pythonを使用してスクリプトを書く場合、lambdaを使用すると、関数を定義するプロセスを省くことができ、コードをより簡素化できます.
2.抽象的で、他の場所で繰り返し使用されない関数については、関数に名前を付けるのも難題であり、lambdaを使用するには階層理論を必要とせず、名前の問題を考慮する必要はありません.
3.lambdaを使用すると、コードが理解しやすくなります.Lambdaベース:
Lambda文では、コロンの前にパラメータがあり、複数あり、カンマで区切られ、コロンの右に戻り値があります.
Lambda文は、実際には関数オブジェクトを構築します.
reduce二元計算:
1から100までの合計を求めます.
階乗を求める:
In [1]: import os
In [4]: os.listdir('/root')
Out[4]:
['.tcshrc',
'.bash_history',
'.bashrc',
'ENV',
'.cache',
'.config',
'.cshrc',
'.bash_logout',
'python',
'.ssh',
'shell',
'.bash_profile',
'.ipython',
'.viminfo',
'dictionary.txt',
'1.txt']
ディレクトリかどうかを判断します.
In [5]: os.path.isdir('/home')
Out[5]: True
ファイルかどうかを判断します.
In [7]: os.path.isfile('/etc/rc.local')
Out[7]: True
ファイル名の絶対パス:
In [8]: os.path.join('/etc/','passwd','abc')
Out[8]: '/etc/passwd/abc'
ディレクトリの下にあるすべてのファイルスクリプトをリストします.
#!/usr/bin/env python
#FengXiaoqing
# listDir.py
import os
import sys
def print_files(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 dirs:
for d in dirs:
print_files(os.path.join(path,d))
if files:
for f in files:
print (os.path.join(path,f))
print_files(sys.argv[1])
[root@localhost ~]# tree /tmp
/tmp
├── 123.tx
├── 123.txx
└── a
└── b
├── b.txt
└── c
├── c.txt
└── d
└── d.txt
4 directories, 5 files
[root@localhost ~]#
[root@localhost ~]# python listDir.py /tmp
/tmp/123.tx
/tmp/123.txx
/tmp/a/b/b.txt
/tmp/a/b/c/c.txt
/tmp/a/b/c/d/d.txt
[root@localhost ~]#
2.匿名関数lambda
Lambda関数は、ラジオを迅速に定義する最小関数であり、関数が必要な場所で使用できます.
3*5実装方法:
In [1]: def fun(x,y):
...: return x * y
...:
In [2]: fun(3,5)
Out[2]: 15
匿名関数定義の場合:
In [3]: lambda x,y:x * y
Out[3]: > #
In [4]: r = lambda x,y:x * y
In [6]: r(3,5)
Out[6]: 15
匿名関数の利点:
1.pythonを使用してスクリプトを書く場合、lambdaを使用すると、関数を定義するプロセスを省くことができ、コードをより簡素化できます.
2.抽象的で、他の場所で繰り返し使用されない関数については、関数に名前を付けるのも難題であり、lambdaを使用するには階層理論を必要とせず、名前の問題を考慮する必要はありません.
3.lambdaを使用すると、コードが理解しやすくなります.Lambdaベース:
Lambda文では、コロンの前にパラメータがあり、複数あり、カンマで区切られ、コロンの右に戻り値があります.
Lambda文は、実際には関数オブジェクトを構築します.
help(reduce)
Help on built-in function reduce in module __builtin__:
reduce(...)
reduce(function, sequence[, initial]) -> value
Apply a function of two arguments cumulatively to the items of a sequence,
from left to right, so as to reduce the sequence to a single value.
For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates
((((1+2)+3)+4)+5). If initial is present, it is placed before the items
of the sequence in the calculation, and serves as a default when the
sequence is empty.
(END)
reduce二元計算:
In [19]: def add(x,y):
return x + y
....:
In [20]: add(1,3)
Out[20]: 4
1から100までの合計を求めます.
#!/usr/bin/python
# -*- coding: utf-8 -*-
#date:2019.07.05
print ('1+100 :%s' % reduce(lambda x,y:x+y,range(1,101)))
階乗を求める:
#!/usr/bin/python
# -*- coding: utf-8 -*-
#date:2019.07.05
print ('5 :%s' % reduce(lambda x,y:x*y,range(1,6)))