1 функция
1.1 Определение функции
1) Выведите строку «Hello World!»:
def hello():
print("Hello World!")
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) Параметры с двумя звездочками ** будут импортированы в виде словаря.
def printInfo(arg1, **vardict):
"打印任何传入的参数"
print(arg1)
print(vardict)
printInfo(20, a=5, b=8)
результат операции:
20
{'а': 5, 'б': 8}
1.5 оператор возврата
Оператор return[expression] используется для выхода из функции, при необходимости возвращая выражение вызывающей стороне. Оператор return без значения параметра возвращает None.
2 объектно-ориентированный
2.1 Определение класса
1. Определите студенческий класс
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 переписывает метод printInfo() родительского класса Person.
3 модуля
Существует два основных способа использования файла Python:
1. Выполнять непосредственно как сценарий
Если выполняется непосредственно как сценарий, если __name__ == "__main__": код до и после выполнения инструкции.
2. Импорт вызывается в других скриптах python
Если импорт выполняется, если __name__ == "__main__": Код до оператора выполняется, но код после него не выполняется.
4 дата и время
Получить отформатированную дату и время можно двумя способами:
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 обычно используются два модуля:
- _нить
- резьба (рекомендуется)
6.1 Создание потоков с помощью модуля _thread
Вызовите функцию start_new_thread() в модуле _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:无法启动线程")
результат операции:
29.12.2029 17:45:43 Тема - 1
29.12.2029 17:45:45 Тема - 2
29.12.2029 17:45:45 Тема - 1
29.12.2029 17:45:47 - 1
29-12-2022 17:45:49 Тема - 2 29-12-2022
17:45:49 Тема - 1
29-12-2022 17:45:51 Тема - 1
29-12-2022 17:45: 53 Тема - 2
29.12.2029 17:45:57 Тема - 2
29.12.2029 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("退出主线程")
результат операции:
Начать тему: Тема-1
Начать тему: Тема-2
Тема-1 30.12.2022 09:05:35
Тема-2 30.12.2022 09:05:37
Тема-1 30.12.2022 09:05: 37
Thread-1 2022-12-30 09:05:39
Thread-2
2022-12-30 09:05:41 Thread-1 2022-12-30 09:05:41
Thread-1 2022-12-30 09: Выход из потока в 05:43
: Тема-1
Тема-2 2022-12-30 09:05:45
Тема-2 2022-12-30 09:05:49
Тема-2 2022-12-30 09:05:53
Выход thread : Thread-2
выходит из основного потока