python入门

2021/04/20 Python

学习python第一篇博客,记录python的基础语法

1、python简介

Python由荷兰数学和计算机科学研究学会的Guido van Rossum 于1990 年代初设计,作为一门叫做ABC语言的替代品。 Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。 Python解释器易于扩展,可以使用C或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。Python 也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码。

2、python的使用

有两种方式:

  1. 交互式:即时得到程序的运行结果,多用于调试
  2. 脚本方式:程序写到文件里,用python解释器执行。

python文件默认是ASCII编码,写中文会报错,可以在首行加入#coding=utf-8

3、python虚拟环境创建

python在使用时会把所需要的包都pip到一起,多个项目的时候容易受到影响,这个时候就需要使用虚拟环境了,虚拟环境就是把python拷贝出来一份,一个项目在这个里面执行,并不会直接下载到核心的元python文件夹里。

VSCODE创建虚拟环境

  1. 安装python插件
  2. 创建个文件vscode打开
  3. 打开终端输入python3 -m venv .venv
  4. 会提示是否使用新的虚拟环境,直接使用就好了

vscode中使用run code插件的话需要额外配置python运行的版本,在插件的扩展设置里面设置

"python": "set PYTHONIOENCODING=utf8 && python3 -u",

4、第一行代码

print('hello world')

使用vscode,右键run code

5、 变量

python中变量的值有三个重要的特征

  1. id:反映的是变量值的内存地址,内存地址不同的id不同
  2. type:不同类型的值用来表示变量值的不同状态
  3. value:值本身

比较变量值可以使用is或者==

is比较的是两个值的身份id是否相等,也就是是否是一个内存地址的变量(类似js的引用类型对比) x is y ==比较的是值本身是否相对(普通的值比较) x == y

id不同,值可能相等,因为两块不同的内存空间可以存相同的值 id相同,值一定相等。

5.1 小整数池

从python解释器启动的那一刻起,就会在内存中事先申请好一系列内存空间,存放着常用的整数,用于优化内存,相同的值就不需要再申请额外的内存空间。

范围:[-5, 256],注意:编辑器的终端会进行优化。

6、常量

python中没有常量,但是会涉及常量概念。虽然有个概念,但是就是没有常量的,没有const。约定所有的字母都是大写的变量为常量

7、数据类型

7.1 数字类型

支持四种:

  1. 整型 int
  2. 长整型 long int
  3. 浮点型 float
  4. 复数 complex numbers)
age = 22
print(type(age))  # <type 'int'>


age = 3.141592653
print(type(age))  # <type 'float'>

7.2 字符串 str

就是字符串

str = '一串字符串'
print(type(str))  # <type 'str'>

# 字符串嵌套
str = '小串里面有\'小串\',这就需要转译'  # 小串里面有'小串',这就需要转译

# 奇怪操作
str = '=' * 10   # ===========

7.3 列表类型 List

注意不是数组,python中没有数组类型,取而代之的是列表和元组,列表比元组好用,因为元组一旦定义就没法修改。而列表不仅可以和数组一样按索引访问,还有一堆的功能,列表存的每个值都可以不同,可以动态改变,元组只能存同一种类型的值,且不能改变。

list1 = ['physics', 'chemistry', 1997, 2000]
list2 = [1, 2, 3, 4, 5, 6, 7 [8, 9]]
 
print("list1[0]: ", list1[0])          # ('list1[0]: ', 'physics')

# 取出多个
print("list2[1:5]: ", list2[1:5])      # ('list2[1:5]: ', [2, 3, 4, 5])  

# 后面拿
print(list1[-1])                       # 2000

# 删除
del list1[0]

# 追加
list1.append('222')

# 插入
list1.insert(1, 'insert')

# 删除特定的一项
list1.remove(1997)

# 扩展 将2追加到1后面
list1.extend(list2)

# 统计某一项出现的次数
list2.count(1)

# 排序 默认从小到大  相反的话list2.sort(reverse=Ture)
list2.sort()     

# 翻转
list2.reverse()

# 根据给定的值获取索引
list2.index(2)

# 移除一个值
list2.pop()

列表的函数:

  1. cmp(list1, list2) : 比较两个列表的元素
  2. len(list) : 列表元素的个数
  3. max(list) : 列表里的最大值
  4. min(list) : 列表里的最小值
  5. list(seq) : 将元祖转换为列表

7.4 字典类型

字典是键值对存在的

d = {
  'a': 1,
  'b': 2
}

print(d['a'])

7.5 布尔类型

isOk = True || False

8、CG 垃圾回收机制

  1. 引用计数:引用一次+1,释放一个-1,会有循环引用的问题
  2. 标记清除:首先标记对象(垃圾检测),然后清除垃圾(垃圾回收)
  3. 分代回收:对象存在时间越长,越可能不是垃圾,应该越少去收集。

9、用户输入

我们可以通过input()来让用户输入,方法返回用户输入的内容,转换成字符串

userInput = input('请输入:')

print(userInput)

python2中的raw_input()方法和python3的input()方法表现一致,python2中的input()方法要求用户输入明确的数据类型,输入什么类型就存什么类型。

10、输出

print在 Python3.x 是一个函数,但在 Python2.x 版本不是一个函数,只是一个关键字。

print()接受多个参数

  • objects – 复数,表示可以一次输出多个对象。输出多个对象时,需要用 , 分隔。
  • sep – 用来间隔多个对象,默认值是一个空格。
  • end – 用来设定以什么结尾。默认值是换行符 \n,我们可以换成其他字符串。
  • file – 要写入的文件对象。
  • flush – 输出是否被缓存通常决定于 file,但如果 flush 关键字参数为 True,流会被强制刷新。
print('xxxx')

还可以进行格式化输出,有四种方式

  1. %
  2. str.format
  3. f-Strings
  4. 标准库模板

%号格式化字符串从python诞生就存在

# 默认按照位置传,一一对应
res = "my name is %s" %('名字')
print(res)

# 可以传个字典类型,通过key获取
res = "my name is %(name)s" %{'name': '名字'}
print(res)

# %d 只能接受数字
print("后面跟d的话只能接受数字: %d" %222)

str.format是python2.6中引入的

# 按位置获取
res = "my name is {name}".format('名字')
print(res)

# 按key获取
res = "my name is {name}".format(name='名字')
print(res)

# 按索引获取
res = "my name is {0}".format('名字')
print(res)

# 解构获取
name = {
  'name': '名字',
  'age': '22'
}
res = "my name is {name}, age is {age}".format(**name)
print(res)

f-string是python3.5之后有的

name = input("请输入名字")
age = input("请输入年龄")
res = f'我的年龄是{age}, 我的名字是{name}'
print(res)

以上三种运行速度最快的是f-string,其次是format,最后是%

11、运算符

  1. 算术运算符:加减乘除 取模(%) 幂(**),其他还有//取整除,只保留整数部分
  2. 赋值运算符: =
  3. 增量赋值:+=age += 1, 其余类似*= /= ...
  4. 链式赋值:x = y = 20
  5. 交叉赋值:n,m = m, n
  6. 解压赋值:num1, num2 = [1,2]
  7. 比较运算符:>、 <、 >=、 <=、 ==、 !=
  8. 逻辑运算符:not取反not 20 > 10 => False and逻辑与 2>1 and 4>3 => True or逻辑或 4>3 or 3>4, 优先级:not > and > or
  9. 成员运算符:in,判断是否存在 'a' in 'a, b' => Ture
  10. 身份运算符:is, 判断id是否相等,判断内存地址是否相等

12、流程控制

if判断

if 6<3:
  print("true")
elif:
  print('...')
else:
  print("false")

while循环

num1 = 5
num2 = 1

while num1 >= num2:
  print("成立")
  num2 += 1


# 跳出循环
num1 = 2
while True:
  print(num1)
  if num1 == 5:
    print('num1')
    break
  else :
    print('err2')

  num1 += 1
  print('==================')


# 第二种方式
count = 0
while count < 6:
  if count == 4:
    count += 1
    continue
  print(count)
  count += 1

# else 

count = 0
while count < 6:
  count += 1
  print(count)
else:
  print('while正常结束后会执行else')

for循环

for x in [1,2,3,4]:
  print(x)


for x in [1,2,3,4]:
  print(x)
else:
  print('ok')

12.1 for和while的区别

  • 相同点:都是循环,for循环可以干的事儿,while都可以,都可以结合breakcontinue,else结合使用
  • 不同点: while循环为条件循环,循环次数取决于条件的状态,for循环为迭代循环,取决于迭代的值的个数

12.2 range()

range()方法:

  • python2.x range() 函数可创建一个整数列表,一般用在 for 循环中。
  • Python3 range() 返回的是一个可迭代对象(类型是对象),而不是列表类型,这个对象只占一个内存地址,当需要的时候临时创建值,而不是一直存储在内存中

13、深浅拷贝

# 浅拷贝 把源列表第一层的内存地址不加区分完全拷贝一份给新列表  可变类型的内存地址没有发现变化
list1 = [1, 2, 3, {a: 1}]
list2 = list1.copy()

# 深拷贝 使用第三方库  可变类型的内存地址也发生改变,是一个全新的值

import copy
list3 = copy.deepcopy(list1)
 

Search

    Table of Contents