Pythonの基本学習コード関数と関数型プログラミング
def func1(): print 'hello world' res = func1() print type(res) def func2(): return ['xyz',10000,-98] atuple = func2() x,y,z = func2() print x,y,z def func3(): return 'xyz',1000,-98 x,y,z = func3() print x,y,z def func4(): return ['xyz',1000,-98,'xxx'] x,y,z,d = func4() alist = x,y,z,d print alist true = lambda :True print true() sum = lambda x,y:x + y summ = lambda x,y=4:x + y atuplet = lambda *zaz:zaz print atuplet('a',1) adictt = lambda **z:z print adictt(x=3,y=5) from random import randint def functest(arg): return arg % 2 allnums = [] for eachnum in range(9): allnums.append(eachnum) print filter(functest,allnums) allnums = [] for eachnum in range(9): # print eachnum ra = randint(1,99) # print ra allnums.append(ra) #print filter(lambda x:x%2,allnums) #print [i for i in allnums if i%2] print [n for n in [randint(1,99) for i in range(9)] if n%2] print map(lambda x:x+2,[i for i in range(9)]) print map(lambda x:x**2,[int(i) for i in range(9)]) print map(str,[i for i in range(9)]) print map(lambda x,y:x+y,[1,2,3],[1,2,3]) print map(lambda x,y:(x+y,x-y),[1,2,3],[1,2,3]) print map(None,[1,2,3],[1,2,3]) print reduce(lambda x,y:x+y,[i for i in range(3)]) from operator import mul,add from functools import partial add1 = partial(add,1) mul100 = partial(mul,100) basetwo = partial(int,base=2) basetwo.__doc__ = 'convert base 2 string to an int' print basetwo('10010') import Tkinter root = Tkinter.Tk() mybutton = partial(Tkinter.Button,root,fg='white',bg='blue') b1 = mybutton(text='button1') b2 = mybutton(text='button2') qb = mybutton(text='quit',bg='red',command=root.quit) b1.pack() b2.pack() qb.pack(fill=Tkinter.X,expand=True) root.title('pfas!') root.mainloop() is_this_global = 'xyz' def foo(): global is_this_global this_is_local = 'abc' is_this_global = 'def' print this_is_local + is_this_global def foor(): m = 3 def bar(): n = 4 print m + n print m bar() def counter(start=0): count = [start] def incr(): count[0] += 1 return count[0] return incr count = counter() output = '<int %r id=%#0x val=%d>' w = x = y = z = 1 def f1(): x = y = z = 2 def f2(): y = z = 3 def f3(): z = 4 print output%('w',id(w),w) print output%('x',id(x),x) print output%('y',id(y),y) print output%('z',id(z),z) clo = f3.func_closure if clo: print 'f3 closure vars:',[str(c) for c in clo] else: print 'no f3 closure vars' f3() clo = f2.func_closure if clo: print 'f2 closure vars:',[str(c) for c in clo] else: print 'no f2 closure vars' f2() clo = f1.func_closure if clo: print 'f1 closure vars:',[str(c) for c in clo] else: print 'no f1 closure vars' from time import time def logged(when): def log(f,*args,**kargs): print '''called: function:%s args:%s kargs:%s'''%(f,args,kargs) def pre_logged(f): def wrapper(*args,**kargs): log(f,*args,**kargs) return f(*args,**kargs) return wrapper def post_logged(f): def wrapper(*args,**kargs): now = time() try: return f(*args,**kargs) finally: log(f,*args,**kargs) print 'time delta:%s' % (time()-now) return wrapper try: return {'pre':pre_logged,'post':post_logged}[when] except KeyError,e: raise ValueError(e),"must be 'pre' or 'post'" @logged('post') def hello(name): print 'hello,',name hello('world!') x = 10 def ffoo(): y = 5 bar = lambda z:x+z print bar(y) j,k = 1,2 def proc1(): j,k = 3,4 print 'j==%d and k==%d' % (j,k) def proc2(): j = 6 proc1() print 'j==%d and k==%d' % (j,k) k = 7 proc1() print 'j==%d and k==%d' % (j,k) j = 8 proc2() print 'j==%d and k==%d' % (j,k) def max2(arg1,arg2): if arg1 > arg2: return arg1 elif arg1 == arg2: return 'equal' else: return arg2 max22 = lambda a,b:a if a > b else b min22 = lambda a,b:a if a < b else b def heji(a,b): return a+b,a*b x,y = heji(3,4) def mymin(a,b,*num): minnum = min22(a,b) for each in num: minnum = min22(minnum,each) return minnum def mymax(a,b,*num): maxnum = max22(a,b) for each in num: maxnum = max22(maxnum,each) return maxnum trantime = lambda m:(unicode(m / 60),unicode(m % 60)) print ':'.join(trantime(80)) a = ['jia','wo','ma'] b = ['get','hoa','?'] print map(None,a,b) print zip(a,b) def oddyear(y): if (y % 4 == 0 and y % 100 != 0) or y % 400 == 0: return y print filter(oddyear,range(1999,2030)) print [y for y in range(1999,2030) if (y % 4 == 0 and y % 100 != 0) or y % 400 == 0] print reduce(lambda x,y:x+y,range(6)) / float(6) cl = lambda x:x.strip() res = map(cl,open('e:\\thefile.txt')) import time def timeit(arg): starttime = time.clock() result = arg endtime = time.clock() return (result,endtime-starttime) def arg(a,b): return a * b print timeit(arg(3,4)) mult = lambda x,y:x * y print reduce(mult,range(9)[1:])
以上就是Python基础学习代码之函数和函数式编程的内容,更多相关内容请关注PHP中文网(www.php.cn)!

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Go 言語は、クロージャとリフレクションという 2 つの動的関数作成テクノロジを提供します。クロージャを使用すると、クロージャ スコープ内の変数にアクセスでき、リフレクションでは FuncOf 関数を使用して新しい関数を作成できます。これらのテクノロジーは、HTTP ルーターのカスタマイズ、高度にカスタマイズ可能なシステムの実装、プラグイン可能なコンポーネントの構築に役立ちます。

C++ 関数の名前付けでは、読みやすさを向上させ、エラーを減らし、リファクタリングを容易にするために、パラメーターの順序を考慮することが重要です。一般的なパラメータの順序規則には、アクション-オブジェクト、オブジェクト-アクション、意味論的な意味、および標準ライブラリへの準拠が含まれます。最適な順序は、関数の目的、パラメーターの種類、潜在的な混乱、および言語規約によって異なります。

効率的で保守しやすい Java 関数を作成するための鍵は、シンプルに保つことです。意味のある名前を付けてください。特殊な状況に対処します。適切な可視性を使用してください。

1. SUM 関数は、列またはセルのグループ内の数値を合計するために使用されます (例: =SUM(A1:J10))。 2. AVERAGE 関数は、列またはセルのグループ内の数値の平均を計算するために使用されます (例: =AVERAGE(A1:A10))。 3. COUNT 関数。列またはセルのグループ内の数値またはテキストの数をカウントするために使用されます。例: =COUNT(A1:A10)。 4. IF 関数。指定された条件に基づいて論理的な判断を行い、結果を返すために使用されます。対応する結果。

C++ の例外処理は、特定のエラー メッセージ、コンテキスト情報を提供し、エラーの種類に基づいてカスタム アクションを実行するカスタム例外クラスを通じて強化できます。 std::Exception から継承した例外クラスを定義して、特定のエラー情報を提供します。カスタム例外をスローするには、throw キーワードを使用します。 try-catch ブロックでdynamic_castを使用して、キャッチされた例外をカスタム例外タイプに変換します。実際の場合、open_file 関数は FileNotFoundException 例外をスローします。例外をキャッチして処理すると、より具体的なエラー メッセージが表示されます。

Go の関数にマップを渡すと、デフォルトでコピーが作成され、コピーへの変更は元のマップには影響しません。元のマップを変更する必要がある場合は、ポインタを介してそれを渡すことができます。空のマップは技術的には nil ポインターであり、空ではないマップを期待する関数に空のマップを渡すとエラーが発生するため、空のマップは慎重に扱う必要があります。

Go で関数型プログラミングを使用する場合に注意すべき 5 つの一般的な間違いと落とし穴があります。 参照を誤って変更することを避け、新しく作成された変数が返されるようにしてください。同時実行の問題を解決するには、同期メカニズムを使用するか、外部の可変状態のキャプチャを避けます。コードの可読性と保守性を向上させるために、部分的な機能化は控えめに使用してください。アプリケーションの堅牢性を確保するために、常に関数内のエラーを処理してください。パフォーマンスへの影響を考慮し、インライン関数、フラット化されたデータ構造、操作のバッチ処理を使用してコードを最適化します。

Java 関数型プログラミングの利点には、単純さ、構成可能性、同時実行性、テストのしやすさ、パフォーマンスなどがあります。欠点としては、学習に時間がかかること、デバッグが難しいこと、柔軟性が限られていること、パフォーマンスのオーバーヘッドが挙げられます。その主な機能には、副作用のない純粋な関数、データ処理パイプライン、ステートレス コード、効率的なストリーミング API が含まれます。
