Pythonエントリ-3

関数 ##

特定のタスクを完了するために使用される名前付きコードブロック。

関数構造

関数コードブロックは、defキーワードで始まり、関数識別子名と括弧()が続きます。入力パラメーターと引数は、括弧の間に配置する必要があります。括弧はパラメータを定義するために使用できます。関数の最初の行では、オプションでdocstringを使用できます。これは関数の説明を格納するために使用されます。関数の内容はコロンで始まり、インデントされています。 returnは関数を終了し、オプションで呼び出し元に値を返します。式なしで返すことは、Noneを返すことと同じです。

簡単なhello関数を作成する

>>> def hello():...print('hello,world')...>>>hello()
hello,world

パラメーター ####

関数を定義する場合、()のパラメーターは正式なパラメーターであり、入力値は実際のパラメーターです。以下の例では、hello(x)が正式なパラメーターであり、7が実際のパラメーターです。

>>> def hello(x):...return x
>>> hello(7)7

デフォルト

パラメータで独自のデフォルト値を定義できます

>>> def hello(x,y):...return x-y
...>>> hello(3,7)-4

戻り値

関数によって返される値は戻り値です

>>> def hello(x):...return x*3...>>>hello(3)9

着信オブジェクトが整数や浮動小数点数などの変更不可能なオブジェクトでない場合、関数で値が変更されても、元のオブジェクトは変更されません。

10個のリストが渡された場合でも、リストは関数内で参照されます。関数が変更されると、元の変数も変更されます。

>>> def hello(x):...     x=2...>>> x=3>>>print(x)3>>>hello(x)>>>print(x)3

xが2になっていないことがわかります

>>> def hello(x):...     x[1]=2>>> x=[2,4,6]>>>hello(x)>>>print(x)[2,2,6]

この関数を実行した後、xが値を変更したことがわかります

辞書に戻る

>>> def person(name,score):
 person={'name':name,'score':score}return person
>>> person("Tom",90){'name':'Tom','score':90}

関数内にネストされた関数

次の例は、関数内のネストされた関数です。戻り値は関数を返し、その中のxはfun関数のパラメーターxです。

>>> def fun(x)
  def fun2(y):return x+y
  return fun2
>>> a=fun(3) ######設定すると=fun(3)パラメータxを渡すことと同等の場合=3,返されるaはfun2の関数です。
>>> type(a)<class'function'>>>>a(8) ######パラメータを再度渡す場合は、y値を渡すのと同じです。
11

関数とwhileループの組み合わせ

>>> def person(name,score):
 person={'name':name,'score':score}return person

 while True:print('please tell me your name and score:')
 name=input('name:')if name =='q':break  
 score=input('score:')if score =='q':break  
 people=person(name,score)print(people)
please tell me your name and score:
name:Tom
score:80{'name':'Tom','score':'80'}
please tell me your name and score:
name:q

配信リスト

ループの内容を追加して、関数にリストを渡すことができます

>>> def hello(x):...for name in x:...print('hello'+name+'!')...>>> t=['tom','mary','hh']>>>hello(t)
hellotom!
hellomary!
hellohh!

任意の数の引数を渡します

正式なパラメータに*を追加します。これは、複数の実際のパラメータを渡すことができることを意味します

>>> def vegetable(*x):...print(x)...>>>vegetable('spinage')('spinage',)>>>vegetable('spinage','chinese leaf')('spinage','chinese leaf')

機能プログラミング

関数を使ってプログラムを表現し、関数の組み合わせを使ってプログラムの組み合わせの考え方を表現することです

lambda

Pythonでは、ラムダキーワードを使用して匿名関数を作成できます。次の例では、ラムダ関数とは何かを説明します。

#### まず、関数を定義するだけです
>>>>>> def ds(x):...return2*x+1...>>>ds(5)11
#### ラムダで表現すると、次のように省略できます。
>>> lambda x:2*x+1<function<lambda> at 0x0000012236894EE8>>>> g=lambda x:2*x+1>>>g(5)11
##### クロージャーの形成はラムダ関数を書きます
>>> def fun(x):...return lambda y:x+y
...>>> tem=fun(4)>>>tem(6)10

filter()

フィルタはフィルタです。その機能は、大量のデータから有用な情報を抽出することです。フィルタには2つのパラメータがあります。1つのパラメータは関数またはなしです。それが関数の場合、2番目のパラメータは反復可能オブジェクトの各要素は関数のパラメーターとして計算され、TRUEを返す値が計算され、TRUEの値のみが返されます。

>>> temp =filter(None,[1,0,False,True])>>>list(temp)[1, True]
#### 以下に関数を追加します
>>> def odd(x):...return x%2...>>> temp=filter(odd,range(10))>>>list(temp)[1,3,5,7,9]

map()

mapはマッピング関数です。1つのパラメーターは引き続き関数で、もう1つは反復可能なオブジェクトです。複数の反復可能なオブジェクトをサポートし、計算結果を返します。

>>> def odd(x):...return x*2...>>> temp=map(odd,range(10))>>>list(temp)[0,2,4,6,8,10,12,14,16,18]>>>list(map(lambda x,y: x+y,[1,3,5],[10,20,30]))[11,23,35]

辞書

pythonでは、辞書は一連のキーと値のペアです。各キーは値に関連付けられています。キーを使用して、対応する値にアクセスできます。キーには、数値、文字列、リスト、または辞書を指定できます。

クラスメートの名前と成績をリストのクラスに保存する場合は、リストとタプルを使用できます。

data=[('tom',89),('mary',90),('haha',100)]
data

[(' tom',89),('mary',90),('haha',100)]

上記のリストの場合、リストにトムがあるかどうかを照会する場合は、リスト内のすべてを比較する必要がありますが、速度が遅くなるため、辞書の形式である特定の機能に従って対応する値を照会します。 key_value、データ構造はmapと呼ばれ、pythonは辞書で構成されるキーと値のペア

辞書を作成しましょう

scores={'tom':90,'mary':80,'mike':70,'jak':100}
scores

{' tom':90,'mary':80,'mike':70,'jak':100}
len(scores)###キーと値のペアがいくつあるかを確認します

4

辞書を使用

scores['tom'] ###キートムに従って対応する値90を取得します
90
scores.get('tom')
90
scores['bob']=88 ###キーと値のペアを辞書に追加します

scores

{' tom':90,'mary':80,'mike':70,'jak':100,'bob':88}
scores['tom']='toom' ###辞書の値を変更する
scores

{' tom':'toom','mary':80,'mike':70,'jak':100,'bob':88}
del scores['tom'] ####キーと値のペアを削除します
scores

{' mary':80,'mike':70,'jak':100,'bob':88}

トラバース辞書

scores

{' mary':80,'mike':70,'jak':100,'bob':88}
for key,value in scores.items(): ###すべてのキーと値のペアをトラバースします
 print(key)print(value)
mary
80
mike
70
jak
100
bob
88
for name in scores.keys(): #####すべてのキーを繰り返します
 print(name)
mary
mike
jak
bob

for score in scores.values(): ####すべての値を繰り返します
 print(score)
807010088
scoresheet={'mike':(60,80,90),'tom':(80,70,99),'mary':(78,90,57)}for key in scoresheet.keys():print(key,scoresheet[key])
mike(60,80,90)tom(80,70,99)mary(78,90,57)

辞書リスト

リストに辞書を含める

alion={'hh':1,'hhw':2,'hhh':3}
alion2={'yy':1,'yyy':2,'yyyy':3}
alion3={"uu":1,'uuu':2,"uuuu":3}
alionall=[alion,alion2,alion3]
alionall

[{' hh':1,'hhw':2,'hhh':3},{'yy':1,'yyy':2,'yyyy':3},{'uu':1,'uuu':2,'uuuu':3}]
for alien in alionall:print(alien)
{' hh':1,'hhw':2,'hhh':3}{'yy':1,'yyy':2,'yyyy':3}{'uu':1,'uuu':2,'uuuu':3}
for alien in alionall[:2]:print(alien)
{' hh':1,'hhw':2,'hhh':3}{'yy':1,'yyy':2,'yyyy':3}

リストを辞書に保存する

apple={'color':['red','yellow'],'shape':['round','square']}
for things in apple.values():print(things)
[' red','yellow']['round','square']
for key in apple.keys():print(key)
color
shape

辞書に辞書を含める

people={'tom':{'math':80,'english':90},'mary':{'math':90,'english':70}}for name,project in people.items():print(name,project)
tom {'math':80,'english':90}
mary {'math':90,'english':70}
for name,pro in people.items():print(name,pro)
tom {'math':80,'english':90}
mary {'math':90,'english':70}

辞書のいとこ:コレクション

コレクションを作成

作成方法は2つあり、1つは直接作成する方法、もう1つはセットで作成する方法です。

>>> name={"tom","yamy","mary","kai"}>>> name2=set(["tom","yamy","mary","kai"])>>> name==name2
True

コレクションにアクセス

コレクション内の要素は順序付けられておらず、シーケンスのように次の表の形式でアクセスすることはできませんが、コレクション内のデータを1つずつ繰り返し読み取ることができます。

>>> for na in name:...print(na)...
kai
tom
mary
yamy

コレクションコンテンツの追加と削除

>>> name.add("haha")>>> name
{' tom','haha','kai','mary','yamy'}>>> name.remove('haha')>>> name
{' tom','kai','mary','yamy'}

不変のコレクション

関数frozensetを使用してコレクションをフリーズすると、コレクションは不変になり、変更できなくなります。

>>> name=frozenset({"tom","yamy","mary","kai"})>>> name.add("hah")Traceback(most recent call last):
 File "<stdin>", line 1,in<module>
AttributeError:'frozenset' object has no attribute 'add'

pythonファイル処理

参照:Rookieチュートリアル、Pythonを練習するためのPythonプログラミングエントリは、open()メソッドを使用して、ファイルオブジェクトが閉じていることを確認します。つまり、close()メソッドを呼び出します。

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

パラメータの説明:ファイル:必須、ファイルパス(相対パスまたは絶対パス)。モード:オプション、ファイルオープニングモードバッファリング:バッファエンコーディングの設定:通常はutf8エラーを使用:エラーレベルnewline:新しい行の文字を区別するclosefd:着信ファイルパラメータタイプオープナー:カスタムオープナーを設定します。オープナーの戻り値は1でなければなりません。ファイル記述子を開きます。モード設定:(コモンモード)rファイルを読み取り専用モードで開きます。ファイルのポインタはファイルの先頭に配置されます。これはデフォルトモードx書き込みモードです。新しいファイルを作成します。ファイルがすでに存在する場合は、エラーが報告されます。w書き込み専用のファイルを開きます。ファイルが既に存在する場合は、ファイルを開いて最初から編集を開始します。つまり、元のコンテンツが削除されます。ファイルが存在しない場合は、新しいファイルを作成します。a追加するファイルを開きます。ファイルがすでに存在する場合、ファイルポインタはファイルの最後に配置されます。つまり、新しいコンテンツは既存のコンテンツの後に書き込まれます。ファイルが存在しない場合は、書き込み用に新しいファイルを作成します

ファイルを開き、ファイルの内容を表示します

ファイルパスの入力がWindowsの場合、バックスラッシュを使用する必要があります\

>>> fo =open("test.txt","r+")>>>print("ファイル名: ", fo.name)
ファイル名:  test.txt
>>> line = fo.read()>>>print("読み取った文字列: %s"%(line))
読み取った文字列: h
nsuiabcjkc
nsjciuabc
>>> withopen('C:\\Users/lihm/Desktop/vscode/python/python05/test.txt')as file_object:...      content = file_object.read()...print(content)...
abcdehcb
bsudiabjs
bcshcuyb
bshcbaknca

ファイルを1行ずつ読み取る

ファイルを読み取るときに、各行を確認したり、特定のファイルに関する情報を見つけたりする必要がある場合は、ファイルの内容をトラバースする必要がある場合があります。forループを使用できます。

>>> withopen('test.txt')as file:...for line in file:...print(line)...
abcdehcb

bsudiabjs

bcshcuyb

bshcbaknca

ファイルの最後に非表示のnewline文字があり、printステートメントでもnewline文字が追加されるため、ファイルの空のテーブル行が1行ずつ印刷されることがわかりました。したがって、印刷時に2つのnewline文字があります。 、rstrip()を使用して新しい行を削除できます

>>> withopen('test.txt')as file:...for line in file:...print(line.rstrip())...
abcdehcb
bsudiabjs
bcshcuyb
bshcbaknca

ファイルに添付

元のコンテンツを上書きする代わりにファイルにコンテンツを追加する場合は、ファイルを追加モードで開くことができます。Pythonは、ファイルを追加モードで開くときに元のファイルコンテンツをクリアせず、書き込まれた新しいファイルコンテンツが最後に追加されます。

>>> file =open("test.txt","r")>>> line = file.read()>>>print("読み取った文字列: %s"%(line))
読み取った文字列: hdacjkanckdsnvkl
nsjciuabc
sxnajiscbiab
njsbcjbjsnc
################################ 文字列tttttttを結合します
>>> fo =open("test.txt","a") #####モードがに変更されました
>>> str ="ttttttt">>> fo.write(str)7>>> fo.close()>>> fo =open("test.txt","r")>>> line = fo.read()>>>print("読み取った文字列: %s"%(line))
読み取った文字列: hdacjkanckdsnvkl
nsjciuabc
sxnajiscbiab
njsbcjbjsnc
ttttttt

空のファイルを書き込む

>>> fo=open("test2.txt","w")>>>fo.write('I love python,I am learning python.')>>> fo.write('I love python,I am learning python.')35>>> fo.close()>>> fo =open('test2.txt','r')>>> fo.read()'I love python,I am learning python.'

複数行を書く

>>> withopen('text2.txt','w')as file:
 file.write('I love python,\n')
 file.write('I am learning.\n')>>>withopen('text2.txt','r')as file:...print(file.read())...
I love python,
I am learning.
################ 直接書くことができます
>>> withopen('text2.txt','w')as file:...     file.write('I love python,\nI am learning.\n')...30>>>withopen('text2.txt','r')as file:...print(file.read())...
I love python,
I am learning.

Python例外処理

Pythonは、pythonプログラムの実行における例外とエラーに対処するための2つの非常に重要な関数を提供します。この関数を使用して、Pythonプログラムをデバッグできます。プログラムを作成するときに、構文エラーと意味エラーの2種類のエラーが発生します。次の例に示すように、Python構文エラー、またはいわゆる解析エラーは、初心者がよく遭遇します。

>>> while True print('Hello world')
 File "<stdin>", line 1,in?while True print('Hello world')^
SyntaxError: invalid syntax
この例では、関数print()前にコロンがないため、エラーがあることを確認しました: 。
パーサーは間違った行を指摘し、エラーが最初に見つかった場所に小さな矢印をマークしました。

Python例外:Pythonで圧倒的なエラーが発生すると、例外オブジェクトが作成されます。コードの記述時に例外を処理するコードが記述されていない場合、プログラムは停止し、例外に関するレポートを含むトレースバックを表示します。

>>>10*(1 /0)             #0は除数として使用できず、例外がトリガーされます
Traceback(most recent call last):
 File "<stdin>", line 1,in?
ZeroDivisionError: division by zero
>>>4+ spam*3             #スパムは未定義であり、例外をトリガーします
Traceback(most recent call last):
 File "<stdin>", line 1,in?
NameError: name 'spam' is not defined
>>>'2'+2    # intをstrに追加できず、例外がトリガーされます
Traceback(most recent call last):
 File "<stdin>", line 1,in<module>
TypeError: can only concatenate str(not "int") to str
################ ファイルの読み取り中に例外が発生しました
>>> f=open("text2.txt","r")>>> f.read()Traceback(most recent call last):
 File "<stdin>", line 1,in<module>
UnicodeDecodeError:'gbk' codec can't decode byte 0x80in position 48: illegal multibyte sequence
################# 正しい
>>> f=open("text2.txt","r",encoding='UTF-8')>>> f.read()
' People&#39;s Dailyは、月曜日から金曜日まで毎日16ページを公開しています。第1版から第4版はニュース版、第5版から第12版は詳細レポート版、第13版から第16版は週刊および特別版です。土曜日と日曜日には、毎日8つのエディションのFolioがあります。\n 1〜4つのエディション
ニュース版で、5〜8版は特別版です。ニュース版は編集と編集に分かれており、適時性とニュースを強調しています。\n詳細なレポートバージョンは、政治的、経済的、文化的、技術的、および国際的なレポートに焦点を当てた、統一された収集と編集を実装します
。ウィークリーエディションとスペシャルエディションは、5種類のウィークリーとその他のカラフルなスペシャルエディションをオープンしました。'

try-exceptコードブロックを使用して例外を指摘します。例外が発生する可能性のある場所にコードを設定して、発生した例外の種類とその修正方法を通知できます。

>>> print(5/0)Traceback(most recent call last):
 File "<stdin>", line 1,in<module>
ZeroDivisionError: division by zero
>>> try:...print(5/0)... except ZeroDivisionError:...print("you can not divide by zero")...
you can not divide by zero
>>> try:...'2'+2... except TypeError:...print("str can not add int")...
str can not add int

try-else-exceptを使用すると、コードの実行能力を向上させ、エラー情報を誤って出力できます。elseコードブロックを追加すると、正常に実行されたコードをelseに配置し、正しい結果を正常に出力できます。

>>> for arg in test:...try:...         f=6/int(arg)...     except ZeroDivisionError:...print("you can not divide by zero")...else:...print(f)...3.0
you can not divide by zero
1.56.0

Recommended Posts

Pythonエントリ-3
Pythonエントリー学習教材
03.Pythonエントリの演算子
Four.mdを学習するPython3エントリ
three.mdを学習するPython3エントリ
Python3.mdの使用を開始する
two.mdを学習するPython3エントリ
Pythonエントリチュートリアルノート(3)配列
05.Pythonエントリ値ループステートメント
Python CookBook
Python FAQ
Python3モジュール
python(you-get)
Python文字列
Pythonの基本
Pythonの基本2
Python exec
Pythonノート
Python3タプル
CentOS + Python3.6 +
Python Advanced(1)
Pythonデコレータ
Pythonマルチスレッド
Pythonツールチェーン
Python3リスト
Pythonマルチタスク-日常
Pythonの概要
pythonの紹介
Pythonアナリティック
Pythonの基本
07.Python3関数
Pythonの基本3
Pythonマルチタスクスレッド
入門から習熟までのPython(2):Pythonの概要
Python関数
python sys.stdout
python演算子
Centos 7.5 python3.6
Python文字列
pythonキューキュー
Pythonの基本4
Pythonの基本5
Centos6はPython2.7.13をインストールします
Pythonは質問に答えます
Pythonはloopメソッドを終了します
Ubuntu16アップグレードPython3
Centos7はPython3.6をインストールします。
ubuntu18.04インストールpython2
Pythonの古典的なアルゴリズム
Python2.7 [インストールチュートリアル]
Python文字列操作
Python 3.9が登場!
python学習ルート
CentOS7アップグレードpython3
Python3の基本構文
Pythonレビュー1
linux + ubuntuはpythonを解決します
pythonの関数
CentOSはPython3.6をインストールします
Python3.9の7つの機能
Pythonファイル操作