Основы Python (постоянно обновляется)

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
выходит из основного потока

Guess you like

Origin blog.csdn.net/Kigha/article/details/128478397