[关闭]
@pluto-the-lost 2020-10-16T00:11:16.000000Z 字数 4373 阅读 44

PyFrom0 - 1.Python的基本语法

从零开始的Python


1. 如何运行Python代码

这里假设安装了Anaconda,菜单栏里会多出一个叫spyder的程序,打开以后是这样
spyder页面
(注意我这是很久以前下的,所以还是Python2.7,现在2.x已经停止维护了,至少也要下3.x,最好下个3.8+,不过界面都一样)

界面分为三块区域,

2. 创建变量

相当简单,不需要声明,直接赋值就可以

  1. a = 1 # 数字
  2. b = a
  3. c = '123' # 单引号/双引号框起来表示字符串,也就是文本
  4. d = b+a
  5. e = f = True # True/False表示真/假的逻辑值,在分支判断里用得多

在变量观察区可以看到结果是这样
创建变量

Btw,在Python里“#”号是单行注释,也就是井号后面的内容都不会被执行,只是方便读代码的人理解

因为没有提前声明变量的类型,赋值时也不用考虑变量类型的兼容性,会直接覆盖掉原先的变量,比如

  1. a = 1
  2. a = '123' # 这时a的值是字符串'123'

python的变量名可以是大小写字母、数字和下划线的组合,但是数字不能作为开头(下划线开头虽然语法上允许,但是也不要用,之后会说它有特殊含义)。对于名字很长的变量,一般用下划线把单词隔开,也可以用大小写字母来区分

  1. a = 1
  2. _aA1 = 1
  3. WhoLovesDiandian = 'xiangxiang'
  4. who_loves_xiangxiang = 'diandian'

3. 运算符

普通的加减乘除自然没什么问题

  1. 1+1-2*3/5 # 四则运算,注意是符合运算顺序的噢(有些语言是从左到右),这里返回0.8
  2. 1 // 2 # 整除取整,这里返回0
  3. 1 % 2 # 整除取余,这里返回1
  4. 2 ** 5 # 幂次运算,这里返回32
  5. 123 + 456 # 字符串相加是直接拼接,这里返回‘123456’

逻辑运算是这样的,这里的"and", "or", "not" 就是逻辑运算符,

  1. a = True
  2. b = False
  3. a and b # 与运算,and前后都是True才返回True,否则返回False,这里返回False
  4. a or b # 或运算,有一个是True就返回True
  5. not a # 非运算,把False编程True,把True变成False
  6. # and和&通用,or和|通用(shift+顿号),不过一般用and和or增加可读性
  7. c = 1
  8. d = 2
  9. c == d # 判断是否相等,这里返回False
  10. c != d # 判断是否不等,这里返回True
  11. c <= d # 判断是否小于等于
  12. c < d # 判断是否严格小于

还有一些赋值运算符,四则运算和幂次运算都可以改成赋值运算,但是这些少用,省不了多少事情,只会增加读代码的难度

  1. a = 1
  2. a += 1 # 等价于 a = a + 1
  3. a *= 2 # 等价于 a = a * 2

4. 输出

这里的输出指打印到控制台,输出到文件的之后再说。最简单的就是print函数了

  1. print('521') # print接受一个字符串,输出出来
  2. print('who loves diandian?', 'xiangxiang!') # 接受多个字符串,中间加上空格按顺序输出
  3. print('say sth?', 521) # 输入数字也是可以的,会自动转换成字符串

print

不要在意这个In[编号],这些代码不一定是按顺序跑的。

有时候会想要输出一个未定的变量:

  1. days_from_together = 19
  2. print('we have been together for '+str(days_from_together)+' days') # 利用字符串拼接
  3. # or
  4. print('we have been together for %d days' %days_from_together) # 这个特性叫“格式化”

结果是这样
输出变量

5. 分支条件判断

Python的条件判断没有其他语言那些花里胡哨的,就是if-else

  1. meeting_on_weekend = False
  2. healthy_on_weekend = True
  3. if meeting_on_weekend:
  4. print("GuGuGu")
  5. elif healthy_on_weekend:
  6. print("IKEA with diandian")
  7. else:
  8. print("抱紧我的小被子")

Python的if-else是判断出一个True,进入那个分支以后就不会对下面的分支进行判断了,所以后面甚至可以写一些会报错的东西(反正也不会执行)。

  1. a = None
  2. if not a:
  3. print('please give "a" a value')
  4. elif a+1==0:
  5. print(a+1)

None作为一个空值,是不能参与运算的,所以a+1这里会报错,但是上面这段代码能够正常运行,因为根本没有执行elif后面的代码

5.1 代码块-缩进

【这里注意一点】python里判断“代码块”的起始与结束是通过【缩进】。如果if进入一个分支,分支中包含的代码是if语句下方具有相同缩进的代码,举个例子

  1. a = False
  2. if a:
  3. b = 1
  4. print(123)
  5. c = a + b # 这行以上的三句都不会运行
  6. d = True # 这句缩进复原了,所以不属于if的代码块,会运行

不仅是if-else体系,后面提到的循环、函数、类都是相似的逻辑,用“缩进”来表示一个代码块的起始和结束。

当然代码块可以嵌套

  1. a = b = True
  2. if a:
  3. print('a is True')
  4. if not b:
  5. print('b is False')
  6. c = 1 # 不会运行
  7. d = 1 # 会运行

缩进一般有两种打法,一是按一下制表符(Tab),二是敲四次空格。严格的程序开发标准应该是敲空格(因为跨平台兼容性好,空格到哪里都是空格,制表符就不一定),但是实在太麻烦了,我一般都敲Tab。有一些IDE可以设置敲一次Tab等于敲四次空格,不过spyder好像不行。

6. 循环

Python的循环有两种,for循环和while循环

  1. for i in [1,2,3,4,5]:
  2. print(i)
  1. while i<5:
  2. print(i)
  3. i = i + 1

循环内可以跳过本轮或终止该循环,分别用continuebreak语句

  1. for i in [1,2,3,4,5]:
  2. if i==3:
  3. continue # 这样i=3的时候会跳过下面的print,只会打印1,2,4,5
  4. print(i)
  1. while i<5:
  2. if i==3:
  3. break # 这样i=3的时候会直接终止这个循环,只会打印1,2
  4. print(i)
  5. i = i + 1
  6. # 思考一下:如果这里的break换成continue会出现什么情况

7. 注释

注释是对代码功能和预期输出进行说明的文字,是为了让自己和别人都能看懂代码,注释部分的内容是不运行的。写稍微复杂一点的程序一定要写注释,不然十分钟后你回头看刚才的代码就会怀疑人生

前面我们已经说过了井号后面接的是单行注释,python也可以有多行注释,有两种方法

  1. #days_from_together = 19
  2. #print('we have been together for '+str(days_from_together)+' days')
  3. ## or
  4. #print('we have been together for %d days' %days_from_together)
  1. """
  2. days_from_together = 19
  3. print('we have been together for '+str(days_from_together)+' days')
  4. # or
  5. print('we have been together for %d days' %days_from_together)
  6. """

8. 调用依赖包

依赖包是装在Python环境里的,要调用一个包首先要安装它,怎么安装后面再说。安装好以后,用 import 调用。依赖包一般是一系列类和函数的定义,调用以后就可以直接用点点号(.)调用里面定义好的类和函数了

  1. import datetime
  2. d1 = datetime.datetime.strptime('2020-09-25', '%Y-%m-%d')
  3. d2 = datetime.datetime.now()
  4. days_from_together = (d2-d1).days
  5. print('we have been together for '+str(days_from_together)+' days')

可以看到依赖包又有它的依赖包,所以常常要调用好多层才能看到我们真正想要的函数,可以用 from...import... 使它简洁一点

  1. from datetime import datetime
  2. d1 = datetime.strptime('2020-09-25', '%Y-%m-%d')
  3. d2 = datetime.now()
  4. days_from_together = (d2-d1).days

也可以用 import...as... 使它短一点,比较方便打字

  1. from datetime import datetime as dt
  2. d1 = dt.strptime('2020-09-25', '%Y-%m-%d')
  3. d2 = dt.now()
  4. days_from_together = (d2-d1).days

为了代码的通用性,import...as... 尽量少用。不过有一些大家约定俗成的缩写,咱们如果用到这些包最好也这么用,不然复制人家的代码下来都跑不动

  1. import numpy as np
  2. import pandas as pd
  3. import matplotlib.pyplot as plt
  4. import seaborn as sns
  5. import torch.nn as nn
  6. import torch.nn.functional as F

import

9. 没啥大用的一些语法

【待续】

现在你已经完全掌握了python的常用语法,快去编写一个自己的项目吧!

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注