Shinkai005

V1

2022/06/27阅读:39主题:红绯

【Python】python基础语法

【Python】python基础语法.md

C位打多了, 你就知道~老抗压怪了~---凯凯不哭~凯凯坚强

我直接写完语法集合,

然后补一些python语法点~就开第三方库~~这样有意思些

哪怕复习一遍学术名词拼写,也有意义.


Python 一些注意点

关于语句的最后分号加不加

  • 我看了分号是可加可不加的, 加了不报错, 虽然大多数情况下玩python都不加 习惯了某语言只是玩一玩python没必要改自己习惯, 找个格式化工具 即可~
  • Python 是缩进严格的语言~ 一定注意不要随意空格 tab
    • 报错 unexpected indent
  • 使用#表示注释~ 一般#后面跟个空格~ (规范嘛)

字面量literal 变量variable

其实直接理解字面量不好理解~我是反过来理解的

  • 字面量就是可以赋值给变量的值~
    • 数值 1 , 2,3,4
    • 字符串"1" "2"
    • ...

python变量不需要声明

  • 直接使用即可
  • 但是不可以不能使用没有赋值的变量,会报错没有defined
  • python和js一样是动态语言,可以赋任何类型的值~,也可以任意修改!

标识符identifier

所有的可以自主命名---函数名, 类名, 变量名都属于标识符identifier

  • 标识符命名规范
    • 可以含有字母数字下划线
      • 没有美元符号哦,js有
    • 数字不能开头
    • 关键词保留字不能用~
  • 命名方式
    • 下划线命名 underscore case max_number
    • 短横杠 实际翻译应该是"羊肉串命名法" kabob case max-number
    • 小驼峰 Lower Camel Case maxNumber
    • 大驼峰 Upper Camel Case 也叫Pascal Case MaxNumber

数据类型

变量值的类型~也就是字面量的种类~

数值: 整数, 浮点数(小数), 复数

  • 在Python 中所有的整数都是int 类型
image-20220625205827216
image-20220625205827216
  • python中整数的大小没有限制,可以是无限大的整数
    • 如果数字太大可以用下划线作为分隔符
c = 123_456_789 # 下划线位置随便添加
  • ​ 输入的内容无法识别会报 invalid token

  • 其他进制的数字(不咋用了解下)

    • 0b开头是十进制
      • 0b10
    • 0o开头是八进制
      • 0o10
    • 0x开头是十六进制
      • 0x10
  • 语句和表达式

    • 表达式不会产生实质性结果,就类似半句话
    • 语句就是一个完整的句子了~
      • c+3 输出c 是没变化的
      • c = c+3 就是语句
      • 那么c++是语句还是表达式~ 是语句
  • 浮点数(小数), 在Python中所有的小数都是float类型

  • 对浮点数进行运算时, 可能会得到一个不精确的结果(很有意思哦)

a1 = 0.1
a2 = 0.2
print(a1+a2)  # 0.30000000000000004
#### 字符串

文本信息吧~字符串就是用来表示'文本信息'

要用引号包裹

-   双引号内还需要使用引号要用单引号---` 相同引号不能相邻嵌套`

```python
a1 = '锄禾日当午,\
汗滴禾下土,\
谁知盘中餐,\
粒粒皆辛苦,\
'

print(a1)  # 结果一行
a2 = '''锄禾日当午,\
汗滴禾下土,\
谁知盘中餐,\
粒粒皆辛苦,\
'''

print(a2)  # 不分行
a3 = '''锄禾日当午,
汗滴禾下土,
谁知盘中餐,
粒粒皆辛苦,
'''

print(a3)  # 分行

通过上面内容可以发现, 这个反斜杠的作用类似一个"软换行"

就是告诉解释器, 后面的换行不要当做换行/内容连接起来

实际上叫做 续行符~ 也是一种转义字符

  • 转义字符
转义字符 描述
\(处于行尾位置) 续行符
\ 反斜杠
单引号
" 双引号
\b 退格
\n 换行
\v 纵向制表符
\t 横向制表符
\r 回车
\f 换页

确实有一些做网页不方便~因为不是必然的单一为网页而生~比如格式保留. 需要不停地写转义符

C在这方面更离谱

写一个有意思的 \u0040可以显示一个@符号

\u之后跟unicode编码 4位

没啥用...编辑器出不来结果 你敢直接用在浏览器?

字符串运算

intro = '你好'
name = 'Shinkai'
# 同字符串类型可以相加
print(intro + name)  # 你好Shinkai
# 下面这种写法在python中并不常见
print(intro + name + "!!!!!")  # 你好Shinkai!!!!!
# 一般写成这样子
print(intro+name, "!!!!!")  # 你好Shinkai !!!!!

占位符

str = 'hello %s' % '孙悟空' # %s 是 string的简写
print(str)  # hello 孙悟空
str1 = 'hello %s 你好 %s' % ('monkey''孙悟空')
print(str1)  # hello monkey 你好 孙悟空
str2 = 'hello %3s' % 'ab'  # 字符串长度最少3
print(str2)  # hello  ab
str3 = 'hello %3.5s' % 'abcdef'  # 字符串长度在3-5
print(str3)  # hello abcde

%f 是浮点数占位符

%d 是整数占位符, 只是舍去小数部分

只是使用不用这么细~我就是学的时候知道一下~

通用写法

res = 'res'
print('res = %s' % res)  # res = res

格式化字符串(更优写法类似js)

intro = 'hello'
name = 'Shinkai'
res = f'{intro} {name}'
print(res)  # hello Shinkai

想玩的花的自己看报错好吧.. 不模拟所有情况了

总结一下字符串拼接方式4种(实际两种)

  1. 字符串运算
  2. 字符串参数
  3. 字符串占位符
  4. 字符串格式化

字符串复制

python独有的,字符串*n会将字符串重复n次返回

name = 'Shinkai' * 2
print('hello ' + name)  # hello ShinkaiShinkai
print('hello', name)
print('hello %s ' % name)
print(f'hello {name} ')

布尔值bool

逻辑判断

布尔值实际也是整型, True是1, False是0

print(1 + True)  # 2
print(1 + False)  # 1
print(1 * False)  # 0

None(不咋用)

None表示不存在 别跟null搞混了不存在null类型但是有None类型

类型检查

目前提到的内容above, 有字符串, 数值,空值

数值包含: 整型(包含布尔), 浮点, 复数

为什么要类型检查

str = '123'
num = 123
print(str)  # 123
print(num)  # 123

可以看到 不同类型的内容 打印出来都是123 不知道类型~

实际上pycharm指针放变量上面就显示了~

print(type(num))  # <class 'str'>
print(type(str))  # <class 'int'>

所有类型检查

# 类型检查
print(type('123'))  # <class 'str'>
print(type(123))  # <class 'int'>
print(type(123.123))  # <class 'float'>
print(type(True))  # <class 'bool'>
print(type(None))  # <class 'NoneType'>

python是面向对象的语言~

说白了现在的都是面向对象,面向对象只要有语法包含声明式表达就叫面向对象.....

Python 是面向对象的语言

  • 一切皆对象
image-20220626130532146
image-20220626130532146

重学还能学到好多东西~ 这是操作系统的内容

调度算法~虽然咱不用~但是备一个影响不大

这块区别有一个静态数据区 静态变量是放在这里的.

什么是对象

这里不写~ 内容太多了....

对象的结构

每个对象都会存一个id, type, value

我们下载的官方版本的python,也就是没有前缀的python解释器~因此就是Cpython, Cpython的id就是变量存储的内存地址

  • id是唯一标识符
  • type是类型
    • 决定了变量拥有哪些功能(方法)
  • value就是值
    • 对象分为可变对象和不可变对象
      • 可变对象的值可以变,
# 对象结构
name = 'Shinkai'
print(id(name))  # 4313468016, 4443786352
print(type(name))  # <class 'str'>
print(name)  # Shinkai

python是强类型的, 类型一旦创建,不能修改

对象和变量

对象实际上没有直接存在变量中, 实际上存储的是对象在内存中的地址

image-20220626132252654
image-20220626132252654
test = 123
test2 = test
test3 = 123
print(test == test2)  # True
print(test == test3)  # True

# 这样写也是相同的

test = {"key""value"}
test2 = test
test3 = {"key""value"}
print(test == test2)  # True
print(test == test3)  # True
image-20220626133438697
image-20220626133438697

类型转换int(),float(),bool(),str()

Python是强类型, 不可以对原来已经声明的变量产生影响,并且不可以隐式转换~但是可以强行转换后把内容赋值给原来的变量~

变量是可以无限次赋值的~

解释一下就是比如int(a), 实际上是吧 a的类型改成int 然后把其他内容复制,然后把这个地址给a.

整型转换,int()

  • 布尔值
    • Ture -> 1 Flase ->0
  • 字符串
    • 合法的数字字符串可以转换成整型
    • 不合法的会报错
  • 浮点数
    • 直接取整
  • None 报错

浮点转换, float()

类似int(),但是是小数形式

字符串转换, str()

Ture->'True'

False->'False'

123->'123'

...

a=True

转布尔,bool()

0,None,''空字符串都是False

运算符

分类

  • 算数运算符Arithmetic operator
  • 赋值运算符assignment operator
  • 比较运算符(关系运算符)relational operator
  • 逻辑运算符 logical operator
  • 条件运算符(三元运算符)ternary operator

算数运算符Arithmetic operator

# +加法运算符(如果是两个字符串之间进行加法运算,则会进行拼串操作)
# -减法运算符
# *乘法运算符(如果将字符串和数字相乘,则会对字符串进行复制操作,将字符串重复指定次数)
# / 除法运算符,运算时结果总会返回一个浮点类型
# //整除,只会保留计算后的整数位
# ** 幂运算
# % 模余运算 结果是余数

赋值运算符assignment operator

=就是简单的右侧值赋给左侧

  • a+=a -> a = a+a
  • -=
  • *=
  • /=
  • //=
  • **=
  • %=

关系运算符relational operator

  • >=
  • <=
  • >
  • <
  • ==
  • !=

有一个有意思的点 字符串的大小比较

print('2'>'11'# true

实际上字符串比较比较的是unicode编码~ 每一位的unicode. 第一位大于就是true

js一样

可以推测出

'a'>'b' # false
'ab' > 'b' # false

没啥用就是有意思.

逻辑运算符 logical operator

逻辑非 not

逻辑与 and

逻辑或 or

一样有短路操作~

  • 逻辑与 只要第一个是false 那么结果就是false不会执行后面,第一个true,执行后面
  • 逻辑或 只要第一个是true 那么结果就是true 不会执行后面,第一个false, 执行后面
False and print(a)  # 不打印
True and print(a)  # 打印
False or print(a)  # 打印
True or print(a)  # 不打印

非布尔值逻辑运算

把每个值转换为布尔值运算

res = 1 and 2 # 第一个为true,返回第二个
res = 1 and 0 
res =  0 and 1 # 第一个为false 短路 直接返回false

or一样~

条件运算符

语法: 语句1 if 表达式 else 语句2

print('1'if True else print('2')

一般这样用

max = a if a > b else b

就是max是ab中大的一个数

运算符优先级

自己先建议加括号

做题看优先级表格, 太离谱的别理他 怼他,你看不懂都可以diss他

语句

条件判断语句 (if语句)Conditional statement

  • if 条件表达式:语句
  • 只执行一个语句的时候可以在 : 后面跟一个语句
  • 如果多个语句就得开启一个代码块
  • python的代码块是有缩进决定的~重启一行即可不需要花括号
a = 2
if a == 1:
    print('1')
    print('2')
print('3'# 3

input() 函数可以暂时阻止程序结束~输入随机字符后结束~

if- elif -else

几个小练习

# # 偶数奇数判断
# num = int(input('随便输入一个数'))
# print('偶数' if num % 2 == 0 else '奇数')

# # 闰年判断
# year = int(input('随便输入一个年份'))
# print('闰年' if ((year % 100 != 0 and year % 4 == 0) or (year % 100 == 0))else '非闰年')

# # 狗子相当于人年龄判断
# dog_age = int(input('请输入你家狗年龄'))
# if dog_age <= 0:
#     print('骗谁呢')
# elif dog_age <= 2:
#     person_age = dog_age * 10.5
#     print(f'狗的年龄相当于人的{person_age}')
# else:
#     person_age = (dog_age - 2) * 4 + 21
#     print(f'狗的年龄相当于人的{person_age}')

# 根据得分, 给奖励
# score = int(input('请输入你的得分'))
# if score == 100:
#     print('niubi666')
# elif 80 <= score <= 99:
#     print('还行')
# elif 60 <= score <= 79:
#     print('屁股开花')
# else:
#     print('no 奖励')
# print(bool(0))
# print(bool('0'))

# 嫁不嫁判断~
# question1 = bool(input('1为是,不填为否, 有房?'))
# question2 = bool(input('1为是,不填为否, 有车?'))
# question3 = bool(input('1为是,不填为否, 帅么?'))
# if question1 or question2 or question3:
#     if question1 and question2 and question3:
#         print('嫁了嫁了')
#     else:
#         print('凑活一下也能过')
# else:
#     print('你是来搞笑的吧')

所有的代码

# a1 = '锄禾日当午,\
# 汗滴禾下土,\
# 谁知盘中餐,\
# 粒粒皆辛苦,\
# '
# print(a1)  # 结果一行
# a2 = '''锄禾日当午,\
# 汗滴禾下土,\
# 谁知盘中餐,\
# 粒粒皆辛苦,\
# '''
# print(a2)  # 不分行
# a3 = '''锄禾日当午,
# 汗滴禾下土,
# 谁知盘中餐,
# 粒粒皆辛苦,
# '''
# print(a3)  # 分行
# intro = '你好'
# name = 'Shinkai'
# # 同字符串类型可以相加
# print(intro + name)  # 你好Shinkai
# # 下面这种写法在python中并不常见
# print(intro + name + "!!!!!")  # 你好Shinkai!!!!!
# # 一般写成这样子
# print(intro+name, "!!!!!")  # 你好Shinkai !!!!!
# str = 'hello %s' % '孙悟空' # %s 是 string的简写
# print(str)  # hello 孙悟空
# str1 = 'hello %s 你好 %s' % ('monkey', '孙悟空')
# print(str1)  # hello monkey 你好 孙悟空
# str2 = 'hello %3s' % 'ab'  # 字符串长度最少3
# print(str2)  # hello  ab
# str3 = 'hello %3.5s' % 'abcdef'  # 字符串长度在3-5
# print(str3)  # hello abcde
# res = 'res'
# print('res = %s' % res)  # res = res
# # 更优的写法
# intro = 'hello'
# name = 'Shinkai'
# res = f'{intro} {name}'
# print(res)  # hello Shinkai
# assignment
# name = 'Shinkai' * 2
# print('hello ' + name)  # hello ShinkaiShinkai
# print('hello', name)
# print('hello %s ' % name)
# print(f'hello {name} ')
# print(1 + True)  # 2
# print(1 + False)  # 1
# print(1 * False)  # 0

# str = '123'
# num = 123
# print(str)  # 123
# print(num)  # 123
# print(type(num))  # <class 'str'>
# print(type(str))  # <class 'int'>

# # 类型检查
# print(type('123'))  # <class 'str'>
# print(type(123))  # <class 'int'>
# print(type(123.123))  # <class 'float'>
# print(type(True))  # <class 'bool'>
# print(type(None))  # <class 'NoneType'>

# # 对象结构
# name = 'Shinkai'
# print(id(name))  # 4313468016, 4443786352
# print(type(name))  # <class 'str'>
# print(name)  # Shinkai

# test = {"key": "value"}
# test2 = test
# test3 = {"key": "value"}
# print(test == test2)  # True
# print(test == test3)  # True

# # 类型转换
# a = True
# a = int(a)
# print(a)

# a = 2**2
# print(a)

# obj1 = {'a': 123}
# obj2 = {'a': 123}
# print(obj1 is obj2)
# a = 0
# a = not a
# print(a)
# a = 0
# False and print(a)  # 不打印
# True and print(a)  # 打印
# False or print(a)  # 打印
# True or print(a)  # 不打印
# print('1') if True else print('2')
# if 1 == 1:
#     print('1')
#     print('1')
# a = 2
# if a == 1:
#     print('1')
#     print('2')
# print('3')
# a = input('请输入1-100一个数字')
# if a == '123':
#     print('回答正确')
# else:
#     print('回答错误, 你的答案是', a)
# age = int(input('请输入你的年龄:'))
# if age > 18:
#     print('你已经成年')
# elif age > 10:
#     print('你上小学了')
# elif age <= 3:
#     print('你还是小孩')
# else:
#     print('奇怪的年龄')

# # 偶数奇数判断
# num = int(input('随便输入一个数'))
# print('偶数' if num % 2 == 0 else '奇数')
# # 闰年判断
# year = int(input('随便输入一个年份'))
# print('闰年' if ((year % 100 != 0 and year % 4 == 0) or (year % 100 == 0))else '非闰年')

# dog_age = int(input('请输入你家狗年龄'))
# if dog_age <= 0:
#     print('骗谁呢')
# elif dog_age <= 2:
#     person_age = dog_age * 10.5
#     print(f'狗的年龄相当于人的{person_age}')
# else:
#     person_age = (dog_age - 2) * 4 + 21
#     print(f'狗的年龄相当于人的{person_age}')
# score = int(input('请输入你的得分'))
# if score == 100:
#     print('niubi666')
# elif 80 <= score <= 99:
#     print('还行')
# elif 60 <= score <= 79:
#     print('屁股开花')
# else:
#     print('no 奖励')
# print(bool(0))
# print(bool('0'))
# question1 = bool(input('1为是,不填为否, 有房?'))
# question2 = bool(input('1为是,不填为否, 有车?'))
# question3 = bool(input('1为是,不填为否, 帅么?'))
# if question1 or question2 or question3:
#     if question1 and question2 and question3:
#         print('嫁了嫁了')
#     else:
#         print('凑活一下也能过')
# else:
#     print('你是来搞笑的吧')

快捷键记录

command + / 注释

shift+回车 光标跳转到下一行开头

option+command + L 格式化代码

shift+command+上下 可以上下移动当前行所有内容

和JavaScript的不同点

  • 缩进代表不同层级代码块
  • 不同类型不能计算
  • 可以使用\区分不同行, 多行内容用''' '''triple quotation mark
    • js用反引号backquote
  • python字符串可以*数字(语法糖)
  • python的boolean是True, False lowercase是错误的
    • js的boolean 是ture, false uppercase是错误的
  • python的变量是没有类型的,变量的类型是赋值的值的类型

好多区别....js把能舍的都舍了

js根本没有'静态资源区域'或者说静态资源被存在栈里.看理解吧没人问的

  • python是强类型的, 类型一旦创建,不能修改
    • js弱类型,而且还有隐式转换~.离谱

js不能打印 内存地址, 这个比较麻烦只能通过双等和三等判断

js偏底层的api很多都没有抛出来

  • python没有三等

    • 不比较地址~毕竟可以看内存地址~

    • js对象内容一样,但是内存地址不一样比较会显示false

      • js中==两个对象实际上比较内存地址~so不可能相同除非指向同一个

      • python用 is 和 is not来比较 内存地址也就是id 类似js===

      • 可以用来比较是否是同一个对象

  • python不区分引用数据类型和基本数据类型,区分的是可变不可变数据类型

  • python不合法字符串转数值,会报错 js不报错有个NaN类型~

  • python多一个整除运算// 以及乘以字符串~

    • js也有**幂运算
  • python和js一样有短路操作

    • 但是逻辑运算符长得不一样 not->! or->|| and-> &&
  • python可以链式比较 1<score<100

    • js不行,运算结果是错误的
  • js的'0'转布尔是false js隐式转换倾向于数值 '0'为0 0是false

  • python的'0'转布尔是true.

分类:

后端

标签:

Python

作者介绍

Shinkai005
V1

公众号:深海笔记Shinkai