1つの機能
1.1 関数の定義
1) 文字列「Hello World!」を出力します。
def hello():
print("Hello World!")
2) 2 つの数値を比較し、大きい方の数値を返します
def max(a,b):
if a > b:
return a
else:
return b
1.2 関数呼び出し
hello()
操作結果:
「こんにちは世界」
a = 10
b = 20
print(max(a,b))
操作結果:
20
1.3 パラメータの受け渡し
- Python では、型はオブジェクトに属し、オブジェクトには異なる型があり、変数には型がありません。
- Python では、文字列、タプル、数値は不変オブジェクトですが、リスト、辞書などは変更可能なオブジェクトです。
1.3.1 不変型
整数、文字列、タプルなどのC++ に似た値の受け渡し。オブジェクトの値のみが渡され、渡されたオブジェクト自体には影響しません。
def swap(a,b):
z = a
a = b
b = z
a = 5
b = 10
swap(a, b)
print(a)
print(b)
操作結果:
5
10
1.3.2 可変型
リストや辞書など、C++ と同様の参照渡し。
def changelist(mylist):
mylist.append([1,2,3,4])
return
mylist=[10,20,30]
changelist(mylist)
print(mylist)
操作結果:
[10,20,30,[1,2,3,4]]
1.4 パラメータ
- 必須パラメータ
- キーワード引数
- デフォルトパラメータ
- 可変長パラメータ
1.4.1 必須パラメータ
必要なパラメータは正しい順序で関数に渡す必要があり、その数は呼び出し時と宣言時で同じである必要があります。
def print_str(str):
print(str)
return
print_str("hello")
操作結果:
こんにちは
1.4.2 キーワード引数
キーワード引数を使用すると、関数の呼び出し時に、宣言時とは異なる順序で引数を配置できます。
次の例での関数パラメーターの使用は、指定された順序で使用する必要はありません。
def printInfo(name, age):
print("名字:", name)
print("年龄:", age)
return
printInfo(age = 50, name = "John")
操作結果:
名前:ジョン
年齢:50歳
1.4.3 デフォルトパラメータ
関数を呼び出すときにパラメータが渡されない場合は、デフォルトのパラメータが使用されます。
次の例では、age パラメータが渡されない場合、デフォルト値が使用されます。
def printInfo(name, age=30):
print("名字:", name)
print("年龄:", age)
return
printInfo(name = "John")
操作結果:
名前:ジョン
年齢:30歳
1.4.4 不定長パラメータ
1) アスタリスク * の付いたパラメータはタプルの形式でインポートされ、名前のない変数パラメータがすべて保存されます。
def printInfo(arg1, *vartuple):
"打印任何传入的参数"
print(arg1)
print(vartuple)
printInfo(10, 20, 30)
操作結果:
10
(20、30)
2) アスタリスク ** が 2 つ付いているパラメータは辞書形式でインポートされます。
def printInfo(arg1, **vardict):
"打印任何传入的参数"
print(arg1)
print(vardict)
printInfo(20, a=5, b=8)
操作結果:
20
{'a': 5、'b': 8}
1.5 return ステートメント
return[expression] ステートメントは関数を終了するために使用され、オプションで呼び出し元に式を返します。パラメータ値のない return ステートメントは None を返します。
2 オブジェクト指向
2.1 クラス定義
1. Student クラスを定義する
class Student:
pass
2. クラスの構築メソッド: __init__()。クラスがインスタンス化されるときに自動的に呼び出されます。
3. __init__() はパラメータを持つことができ、パラメータはそれを通じてクラスのインスタンス化操作に渡されます。
class Student:
# 定义基本属性
name = ''
age = 0
score = 0
# 定义私有属性,在类外部无法直接进行访问
__weight = 0
# 定义构造方法
def __init__(self, name, age, score):
self.name = name
self.age = age
self.score = score
# 实例化
stu = Student("John", 90)
2.2 クラスメソッド
クラス メソッドには、最初のパラメーターであるパラメーター self が含まれている必要があり、self はクラスのインスタンスを表します。
class Person:
name = ''
age = 0
__weight = 0
def __init__(self, name, age, weight):
self.name = name
self.age = age
self.__weight = weight
def printInfo(self):
print("姓名:", self.name)
print("年龄:", self.age)
# 实例化
p = Person("John", 18, 80)
p.printInfo()
操作結果:
名前:
ジョン年齢:18
2.3 継承
Person クラスを継承します。
class Student(Person):
score = 0
def __init__(self, name, age, weight, score):
#调用父类的构造函数
Person.__init__(self, name, age, weight)
self.score = score
# 覆盖父类的方法
def printInfo(self):
print("姓名:", self.name)
print("年龄:", self.age)
print("分数:", self.score)
stu = Student('Ken', 20, 75, 90)
stu.printInfo()
操作結果:
名前:ケン
年齢:20歳
スコア:90点
2.4 メソッドの書き換え
親クラスのメソッドの機能が要件を満たせない場合は、サブクラスで親クラスのメソッドを書き換えることができ、上記サブクラス Student は親クラス Person のメソッド printInfo() を書き換えます。
3モジュール
Python ファイルを使用するには主に 2 つの方法があります。
1. スクリプトとして直接実行
スクリプトとして直接実行する場合、 if __name__ == "__main__": 文の前後のコードが実行されます。
2. 他の Python スクリプトで import が呼び出される
import が実行される場合、 if __name__ == "__main__": 文の前のコードは実行されますが、文以降のコードは実行されません。
4 日付と時刻
フォーマットされた日付と時刻を取得するには 2 つの方法があります。
1. timeモジュールを介して取得する
import time
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
操作結果:
2022-12-29 16:15:25
2. datetimeモジュールを介して
from datetime import datetime
print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
操作結果:
2022-12-29 16:14:56
5つのファイル
1. mode = 'w'、ファイルを書き込みモードで開きます。
# 以w写入模式,创建test.txt
file = open('./test.txt', mode = 'w')
# 写入内容
file.write('hello\n')
file.write('world\n')
# 关闭文件
file.close()
テキストの内容は次のとおりです。
こんにちは
、世界
2. mode = 'a'、ファイルを追加モードで開きます。
file = open('./test.txt', mode = 'a')
file.write('hello world\n')
file.close()
テキストの内容は次のとおりです。
ハロー
ワールド、
ハローワールド
3. mode = 'r'、ファイルを読み取り専用モードで開きます。
file = open('./test.txt', mode = 'r')
コンテンツの行を読みます。
str = file.readline()
print(str)
str = file.readline()
print(str)
str = file.readline()
print(str)
file.close()
操作結果:
ハロー
ワールド、
ハローワールド
6 マルチスレッド
Python3 スレッドで一般的に使用される 2 つのモジュールは次のとおりです。
- _糸
- ねじ切り(推奨)
6.1 _thread モジュールを使用してスレッドを作成する
_thread モジュールの start_new_thread() 関数を呼び出して、新しいスレッドを生成します。
import _thread
import time
# 为线程定义一个函数
def print_time(threadName, delay):
count = 0
while count < 5:
time.sleep(delay)
count += 1
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + ' ' + threadName + '\n')
# 创建两个线程
try:
_thread.start_new_thread(print_time, ("Thread - 1", 2, ))
_thread.start_new_thread(print_time, ("Thread - 2", 4, ))
except:
print("Error:无法启动线程")
操作結果:
2022-12-29 17:45:43 スレッド - 1
2022-12-29 17:45:45 スレッド - 2
2022-12-29 17:45:45 スレッド - 1
2022-12-29 17:45:47 スレッド- 1
2022-12-29 17:45:49 スレッド - 2
2022-12-29 17:45:49 スレッド - 1
2022-12-29 17:45:51 スレッド - 1
2022-12-29 17:45: 53 スレッド - 2
2022-12-29 17:45:57 スレッド - 2
2022-12-29 17:46:01 スレッド - 2
6.2 スレッド化モジュールを使用してスレッドを作成する
import threading
import time
exitFlag = 0
class myThread(threading.Thread):
def __init__(self, threadID, name, delay):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.delay = delay
def run(self):
print("开始线程:" + self.name)
print_time(self.name, self.delay, 5)
print("退出线程:" + self.name)
def print_time(threadName, delay, counter):
while counter:
if exitFlag:
threadName.exit()
time.sleep(delay)
print(threadName + time.strftime(" %Y-%m-%d %H:%M:%S", time.localtime()) + '\n')
counter -= 1
thread1 = myThread(1, "Thread-1", 2)
thread2 = myThread(2, "Thread-2", 4)
thread1.start()
thread2.start()
thread1.join()
thread2.join()
print("退出主线程")
操作結果:
開始スレッド: Thread-1
開始スレッド: Thread-2
Thread-1 2022-12-30 09:05:35
Thread-2 2022-12-30 09:05:37
Thread-1 2022-12-30 09:05: 37
スレッド-1 2022-12-30 09:05:39
スレッド-2
2022-12-30 09:05:41 スレッド-1 2022-12-30 09:05:41
スレッド-1 2022-12-30 09: 05:43にスレッドを終了します
: Thread-1
Thread-2 2022-12-30 09:05:45
Thread-2 2022-12-30 09:05:49
Thread-2 2022-12-30 09:05:53
終了しますthread : Thread-2 が
メインスレッドを終了します