python: basics

jackletter 2022-11-08 04:55:30 阅读数:901

pythonbasics

环境:

  • window11
  • python 3.10.6
  • vscode
  • javascript、c/c++/java/c#基础(Contrast with these languages)

注释

在这里插入图片描述

一、数据类型

Basic six data types,可以使用 type()查看,如下图:

在这里插入图片描述

1.1 数字(Number)

支持

  • 整数(int)
  • 浮点数(float)
  • 复数(complex),如:4+3j,以j结尾表示复数
  • 布尔(bool)True用1表示,False用0表示,反之,1表示True,其他表示False

1.2 字符串(String)

1.3 列表(List)

An ordered mutable list

1.4 元组(Tuple)

有序的不可变序列,可有序记录一堆不可变的Python数据集合

1.5 集合(Set)

Unordered and non-repetitive binding
可无序记录一堆不重复的Python数据集合

1.6 字典(Dictionary)

无序Key-Value集合
可无序记录一堆Key-Value型的Python数据集合

1.7 数据类型转换

可以将任意类型转为字符串,如:数字/字符串/列表/元组/集合/字典 => 字符串,如下图:
在这里插入图片描述

But strings don't go to any other type,Because a string is essentially a list of characters,See the effect of the conversion below:
在这里插入图片描述

其他的转换,如:int <=>float吗,需要注意:float转int会有精度丢失(Note that precision is lost,不是四舍五入),看下图:
在这里插入图片描述

二、变量

python是脚本语言,弱类型,So a variable can be assigned any other value,Even change the data type,这点和javascript类似.
另外,pythonThere is no need to define variables in ,直接使用即可,如下:
在这里插入图片描述

三、运算符

常见运算符 :+ 加法,- 减法,* 乘法,/ 除法,// 整除,% 取余,**指数

Listed below are a few key points to focus on:
在这里插入图片描述

四、字符串扩展

4.1 定义的三种方式:

  • 使用单引号' abc'
  • 使用双引号"abc"
  • 使用 """abc"""'''abc'''

特点总结:

  1. Single and double quotes work similarly,Supporting these two methods gives us the possibility of not writing transfer characters \,如:
    在这里插入图片描述
  2. 使用 """abc"""'''abc''',This allows us to omit the line break to match\的苦恼,See the comparison below:
    在这里插入图片描述
    另外,我们需要注意,"""abc"""'''abc'''Do not want to have line breaks at the beginning and end,Stick to this writing,Otherwise a newline will be generated,如下:
    在这里插入图片描述

4.2 字符串的拼接

使用 + Can be spliced,But unlike other languages,We can't convert strings and other types(如:int)进行相加,如下:
在这里插入图片描述

javascript是允许的,Pay attention to this:
在这里插入图片描述

4.3 字符串格式化

上面使用+The string concatenation is simple and ok,When adding a lot of content, it becomes difficult to read,And no other data types are supported yet(比如: int/float)自动转字符串,So there are the following two string formatting methods:

  • %d, %f, %s:类似c语言
  • f"{exp}{exp2}"

下面是效果:
在这里插入图片描述

五、交互式输入

可以使用input(prompt)Get input from the user console,回车后,用户输入的字符串passed to the program,如下:
在这里插入图片描述

六、for循环和range

python中的for循环没有 for(int x=0;x<10;x++)这种格式,只有: for x in li:这种,如下:
在这里插入图片描述
这种方式,There is no way to get the current progress in this loop body,但我们可以借助range

rangeThe function itself is to generate a range,格式为:range(start,end,step) 注意:包含start,不包含end,看下面的示例:
在这里插入图片描述
那么,组合rangefor循环如下:
在这里插入图片描述

七、函数

7.1 简单函数

Just look at the usage example below:
在这里插入图片描述
返回的None可以用于if判断中,表示False
returnreturn None 是一样的.

7.2 Parameters and return values ​​in functions

另外,pythonThe functions in have some additional features,如:

  • 支持返回多个值
  • 支持默认参数、关键字参数、不定长参数(*和**)

直接看示例:
在这里插入图片描述

Example of variable-length parameters:
在这里插入图片描述

7.3 函数做参数/匿名函数/lambda函数

在这里插入图片描述

八、容器之列表

8.1 概念和操作

python中的list类似javascript中的数组, c#中的list,常见操作如下:

  • 获取列表长度: len(li)
  • 获取指定索引元素: li[index]
  • 遍历: for x in li:
  • Get the index at which the value is located: li.index(ele)
  • 插入: li.insert(index,ele)
  • 追加: li.apped(ele)
  • Append another container: li.extend(li2)
  • 移除指定元素: li.remove(ele)
  • 根据下标移除: dele li[index]
  • 从末尾弹出: delEle=li.pop()
  • 清空列表: li.clear()
  • Counts the number of an element in a list: li.count(ele)
  • 列表排序: li.sort(key=lambda: x: x"age"], reverse=True)

看下面的示例:

8.2 通过下标访问列表

在这里插入图片描述

8.3 循环遍历列表

在这里插入图片描述

8.4 常见函数用法(增删改查、排序、统计)

# 插入到指定位置
print()
print("------li.insert()-------")
li = ["刘备", "关羽", "张飞"]
li.insert(0, '曹操')
print(f'["刘备", "关羽", "张飞"].insert(0,"曹操")=> {
li}')
# 追加元素
print()
print("--------append()------")
li = ["刘备", "关羽", "张飞"]
li.append("孔明")
print(f'["刘备", "关羽", "张飞"].append("孔明")=> {
li}')
# Append another container
print()
print("--------extend()------")
li = ["刘备", "关羽", "张飞"]
li.extend(["孙策", "孙权"])
print(f'["刘备", "关羽", "张飞"].append(["孙策", "孙权"])=> {
li}')
# 移除指定元素
print()
print("--------remove(): 只移除第一个------")
li = ["刘备", "关羽", "张飞", "关羽"]
li.remove('关羽')
print(f'["刘备", "关羽", "张飞","关羽"].remove("关羽")=> {
li}')
# 根据下标移除
print()
print("--------del list[index]: 根据下标移除------")
li = ["刘备", "关羽", "张飞"]
del li[1]
print(f'["刘备", "关羽", "张飞"] del li[1]=> {
li}')
# Remove one from the end
print()
print("--------pop(): Pop one from the end------")
li = ["刘备", "关羽", "张飞"]
ele = li.pop()
print(f'["刘备", "关羽", "张飞"].pop()=> {
li}, ele={
ele}')
# 清空列表
print()
print("--------clear(): 清空列表------")
li = ["刘备", "关羽", "张飞"]
li.clear()
print(f'["刘备", "关羽", "张飞"].clear()=> {
li}')
# 获取列表长度
print()
print("--------len(li): 获取列表长度------")
li = ["刘备", "关羽", "张飞"]
count = len(li)
print(f'len(["刘备", "关羽", "张飞"])=> {
count}')
# Count the number of list elements
print()
print("--------count(ele): 统计列表某个元素数量------")
li = ["刘备", "关羽", "张飞", "关羽"]
count = li.count("关羽")
print(f'["刘备", "关羽", "张飞","关羽"].count("关羽")=> {
count}')
# 列表排序
print()
print("--------sort(): 列表排序------")
li = ["a", "c", "b"]
li.sort()
print(f'["a","c","b"].sort()=> {
li}')
li = ["a", "c", "b"]
li.sort(reverse=True)
print(f'["a","c","b"].sort(reverse=True)=> {
li}')
li = [{
"name": "小明", "age": 18},
{
"name": "小花", "age": 16},
{
"name": "小刚", "age": 20}]
li.sort(key=lambda x: x["age"], reverse=True)
print(f'[dict1,dict2,dict3].sort(key=lambda x: x["age"])=> {
li}')
""" 输出如下: PS D:\jackletter\pylearn> py .\15.py ------li.insert()------- ["刘备", "关羽", "张飞"].insert(0,"曹操")=> ['曹操', '刘备', '关羽', '张飞'] --------append()------ ["刘备", "关羽", "张飞"].append("孔明")=> ['刘备', '关羽', '张飞', '孔明'] --------extend()------ ["刘备", "关羽", "张飞"].append(["孙策", "孙权"])=> ['刘备', '关羽', '张飞', '孙策', '孙权'] --------remove(): 只移除第一个------ ["刘备", "关羽", "张飞","关羽"].remove("关羽")=> ['刘备', '张飞', '关羽'] --------del list[index]: 根据下标移除------ ["刘备", "关羽", "张飞"] del li[1]=> ['刘备', '张飞'] --------pop(): Pop one from the end------ ["刘备", "关羽", "张飞"].pop()=> ['刘备', '关羽'], ele=张飞 --------clear(): 清空列表------ ["刘备", "关羽", "张飞"].clear()=> [] --------len(li): 获取列表长度------ len(["刘备", "关羽", "张飞"])=> 3 --------count(ele): 统计列表某个元素数量------ ["刘备", "关羽", "张飞","关羽"].count("关羽")=> 2 --------sort(): 列表排序------ ["a","c","b"].sort()=> ['a', 'b', 'c'] ["a","c","b"].sort(reverse=True)=> ['c', 'b', 'a'] [dict1,dict2,dict3].sort(key=lambda x: x["age"])=> [{'name': '小刚', 'age': 20}, {'name': '小明', 'age': 18}, {'name': '小花', 'age': 16}] PS D:\jackletter\pylearn> """

九、A tuple of containers

python中除了list还有tuple,元组是只读的,So there are no additions, deletions, and other operations.
直接看下面:

9.1 元组的定义

在这里插入图片描述

9.2 Tuple access and traversal

Because tuples are stored sequentially,So support access by index,同时支持for循环,如下:
在这里插入图片描述

9.3 元组函数 index 和 count

这个和list的用法类似,如下:
在这里插入图片描述

十、A string of containers

Strings can be thought of as read-only containers of characters,类似list

10.1 Subscript access and traversal of strings

在这里插入图片描述

10.1 常见函数

在这里插入图片描述

十一、容器(序列)的切片

列表(list)、元组(tuple)、字符串(str) All three are sequences,They support slicing operations.
切片的语法为:seq[start:end:step],其中,start/end/step的默认值分别为:0/len(seq)/1

下面以列表为例,See how it works:在这里插入图片描述
The same is true for tuples and strings,如下:
在这里插入图片描述

十二、容器之集合

Sets are relative to lists、元组、字符串的特点是:无序且唯一.
Because unordered nature cannot be accessed by subscript,Nor can it be used for slicing.
The only thing is that the collection is automatically deduplicated.

12.1 集合的定义

在这里插入图片描述

12.2 集合的遍历

在这里插入图片描述

12.3 集合的常见操作

  • 添加 se.add(ele)
  • 移除/弹出 se.remove(ele) / ele = se.pop()
  • 清空 se.clear()

如下图:
在这里插入图片描述

There are also set operations

  • 求交集 se & se2
  • 求并集 se | se2
  • 求差集 se - se2
  • 求补集 se ^ se2

如下图:
在这里插入图片描述

There is also a set operation that will overwrite the result of the first set,如:
se.intersection_update(se2)
se.difference_update(se2)

不再实验

十三、容器之字典

pythonDictionary and javascriptThe object has a meaning,Just look at the example below:

字典的定义:
在这里插入图片描述

注意:我们如果 dic[key] If it does not exist, an error will be reported,但我们可以使用 dic.get(key),当然我们也可以使用__contains__去判断,如下:
在这里插入图片描述

字典的遍历:
在这里插入图片描述
Dictionaries change data:
在这里插入图片描述

十四、文件操作

文件模式:
r 只读
w:存在则覆盖,不存在则新建
a:存在则追加,If it does not exist, create a new append

Simple write and read and write examples:
在这里插入图片描述
We can also specify the number of characters to read(注意:不是字节数)或读取一行,如下(Still created with the abovetxt):
在这里插入图片描述
我们也可以使用for循环读取,另外,我们可以使用withKeywords to prevent forgetting to writeclose()
在这里插入图片描述

十五、异常

Just look at the example below:

print("------捕获异常---")
try:
i = 5/0
except Exception as ex:
print(type(ex), ex)
print()
print("------捕获异常---")
try:
dic = {
"age": 18}
i = dic["name"]
except Exception as ex:
print(type(ex), ex)
print()
print("------捕获异常---")
try:
i = 5/0
except:
print("异常了")
print()
print("-------捕获多种异常--------")
try:
i = 5/0
except (KeyError, ZeroDivisionError) as ex:
print(type(ex), ex)
print()
print("------finally-------")
try:
i = 5/0
except:
print("异常了")
finally:
print("finally执行了")
print()
print("--------自己引发异常-------")
try:
raise Exception("Tests throw exceptions manually")
except Exception as ex:
print(ex)

输出如下:

在这里插入图片描述

十六、模块和包

概念:在pythonsimple to understand,一个文件就是一个模块
导入模块的语法:
[from 模块名] import [ 模块 | 类 | 变量 | 函数 | * ] [as 别名]

常用形式:

  • import 模块名
  • from 模块名 import 类、变量、方法等
  • from 模块名 import *
  • import 模块名 as 别名
  • from 模块名 import 功能名 as 别名

看一个简单的示例(Import system provided):
在这里插入图片描述

16.1 自定义模块

我们可以自定义模块,然后导入,如下:

# 路径: /cc/c_28.py
# Anything defined by default can be exported, 可以使用 __all__Specifies which only to export,But only limited to import *
__all__ = ["funcSub"]
def funcSub(x, y):
return x-y
print()
print("-------------")
print(f"__file__:{
__file__}")
print(f"__name__:{
__name__}")
if (__name__ == "__main__"):
print(f"直接运行脚本: {
__file__}")
else:
print(f"Script imported: {
__file__}")
# 路径: /pp/test.py
import sys
import os
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
from cc.c_28 import funcSub
print()
print("-----------")
print(f"funcSub(1, 2)=>{
funcSub(1, 2)}")

运行如下:
在这里插入图片描述

There are a few points to note above:

  • __name__ Can be used to determine whether the current module is imported or run directly
  • __all__ Can be used to limit import time(import *) Only the specified modules can be imported(注意,只有在 import * 时有效)
  • 可以使用 sys.path.append(xx) Add the specified path to the module search

16.2 packages and custom packages

在pythonThe package is actually a folder,There can be many modules inside(代码文件),Sort by package,方便管理.
但pythonThere is a difference between a package and a normal folder:包下面有一个 __init__.py file to identify this as a package,Usually used in this file`all``to limit what is exported.
如:
在这里插入图片描述

十七、pipand domestic sources

参考:《pythonOperation steps for configuring domestic mirror sources》

类似 java中的maven,javascript中的npm,python中也有pipA program that manages packages.
We can easily refer to the three-party package through it,如下:

We can first view the configuration through the command:
在这里插入图片描述
来解释下:

  • pip config list 显示所有的配置,The domestic source is currently set,If not, you can refer to it:
    pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
    pip config set install.trusted-host='pypi.tuna.tsinghua.edu.cn'

    There are other commonly used sources:
    1、Mirror source of South China University of Technology
    http://pypi.hustunique.com/simple/%29
    2、清华大学
    https://pypi.tuna.tsinghua.edu.cn/simple
    3、豆瓣
    http://pypi.douban.com/simple/
    4、清华大学开源镜像站
    https://mirrors.tuna.tsinghua.edu.cn/
    5、网易开源
    http://mirrors.163.com/
    6、华为
    https://mirrors.huaweicloud.com/
    7、阿里巴巴
    https://opsx.alibaba.com/mirror/

  • pip list Displays currently installed third-party packages
    可以看到,Currently I have one installed numpy,The other two are self contained,安装命令为:
    pip install aliyun-python-sdk-core==2.13.36 (也可以不指定版本)
    如下:
    在这里插入图片描述

十八、虚拟环境

18.1 概念

pythonjavac#This language is different:

  • javac#都是静态语言,Installed packages are compiled by others,They can cache versions of a package,Then add the reference to the project;
  • python是解释性语言,Installed from source code,没有Add a version of the package to the project reference这种说法,So it is a lot of trouble to manage;

javascript也是解释性语言,It also has the same problem,不过npmis to put all the packages referenced in this projectnode_moudules文件夹下面.The disadvantage is that each new project has to be downloaded again,Even if we use xxxxthe same version of the package.

python为了解决这个问题,提出了虚拟环境的概念,就是将pythonMake a copy as the new environment,In this way, we install packages in the new environment without affecting other environments,做到了隔离.比如:

  • 我们在环境A里导入了xxxx包的1.0版本,在环境B里导入了xxxx包的2.0版本.它们互不影响;
  • 项目A和项目B使用环境A,Because they both import the same version of the package,项目C和项目D使用环境B,Because they will also use packages from the same environment;

18.2 创建和使用虚拟环境

Let's start by selecting a directory,如 D:\jackletter\my-venv,然后执行如下:py -m venv my-venv

在这里插入图片描述
执行完成后,Take a look at what's inside:
在这里插入图片描述
我们需要激活这个环境,如下:
.\Scripts\Activate.ps1
在这里插入图片描述
In fact, activation is tomy-venv的路径配置到path里面,如下:
在这里插入图片描述
在虚拟环境里,我们安装的包都在 my-venv\Lib\site-packages下,如下:
在这里插入图片描述

The command to exit the virtual environment is:.\Scripts\deactivate.bat,不过在powershell中不好用...但在cmd里是可以的...

版权声明:本文为[jackletter]所创,转载请带上原文链接,感谢。 https://pythonmana.com/2022/312/202211080450258870.html