Python 基础语法

Python 基础语法_第1张图片

我是从 android 入门的,一直以来学习的也是客户端的技术,语法是专研 java,kotlin,Dart,难免感觉自己技术浅薄,偏科,万一哪天要是淘汰了呢,虽说这是杞人忧天,但是这就是我内心对的忧虑,看着 AI 发展的红红火火,自治是时候开始接触 AI,开始自己的 AI 应用之旅了,那么就从 Pthon 语法基础开始吧~


Python 环境

目前 Python 有 2.7X 和 3.7X 2个版本,2.7 和 3.7 语法上有些差别,2.7 的代码不能直接在 3.7 上运行,目前 Python 库也有一些不能在 3.7 上运行,我这里直接以 3.7 版语法为基准,2.7 和 3.7 差别不是很大,大家有兴趣看看就行了,2.7 版代码唉格式和书写上相互对宽松,3.7 版则标准化了整个书写格式和规范

  • python2与python3的区别齐全【整理】
  • Python2和Python3的区别,以及为什么选Python3的原因

IED 工具使用的是 pycharm,看着和 AS 很像,所以就用它了,和 AS 一样的是耗费内存,当然还有很多其他 IED 开发工具

Python 基础语法_第2张图片
pycharm

Python 特性

Python 的特性非常鲜明:

  • 解释型语言 - python 文件不需要编译,可以由解释器直接运行,当然这样的话速度上 Python 就不见长了
  • 支持多种系统平台 - Python 因为不用编译,并且很多平台都兼容 Python,所以一处编写的 Python 文件可以处处运行
  • 语法及其简洁 - 用最少的代码,干最多的事,我想这是 Python 的初衷了吧,没有语言能如同 Python 一样致力于减少代码量了,这点我在开始学习时就有感触了
  • 胶水粘合其他语言 - Python 据说可以很容易就链接替他语言变写的库,这点还没看到,所以 Python 的学习也是很简单,用别人的库就行了
  • 支持高阶函数 -
  • 弱类型语言 - 甚至不需要写 var,val
  • 没有{} - python 方法提没有 {} 包裹,完全靠缩进表示,非常蛋疼,缩进不对是会出错的,只能考 IED

python 历史原理是一上来只支持 ASCII编码,在 IED 中设置 UTF-8 到时没问题,但是在命令行执行时就不行了,需要加上一个 tag:# -*- coding: utf-8 -*-

# -*- coding: utf-8 -*-

....代码....

Python 数据类型

Python 致力于极简,所以数据类型也简化了,只有:

  • int - 整数
  • float - 浮点数
  • boolean - 布尔值,python 的 boolean 值都是大写的:True、False
  • string - 字符串
  • None - python 的空值

没有传统的 java 中 byte,short,long,double 这些基本数据类型了

python 的写法很自由,前面说了 python 是弱类型语言,python 不仅是弱类型,甚至连都不用加变量表示,不用写 var、val 可以给参数连续赋值不同类型的数据

# -*- coding: utf-8 -*-

# 连续赋值不同类型数据
a = 10
a = "xxx"
a = True

print(str(a))
-> /Users/zbzbgo/workspace_python/Test/Test.py
True

python 注释

# 这个字符就是注释标记了

# xxx
# yyy

python 基本方法

  • str() - 转换成字符串
  • int() - 转换成整数
  • float() - 转换成浮点数
  • print() - 打印
  • input - 接受命令行输入参数

python 的这些基本方法,大家看看解释就知道怎么用了,我就说说需要注意的点:

  • print 函数可以接受表达式或是字符串,不能又传字符串又传其他类型的数据

字符串

# -*- coding: utf-8 -*-

# r"..." 表示不转义
a = r'\(~_~)/ \(~_~)/'

# '''...''' 多行数据,根据输入格式输出
b = '''
AAA
BBB
CCC
'''

# r'''...''' 也行的
c = r'''Python is created by "Guido".
It is free and easy to learn.
Let's start learn Python in imooc!'''

print(a)
print(b)
print(c)
-> /Users/zbzbgo/workspace_python/Test/Test.py
\(~_~)/ \(~_~)/

AAA
BBB
CCC

Python is created by "Guido".
It is free and easy to learn.
Let's start learn Python in imooc!
Python 基础语法_第3张图片
python 转义字符

python 的字符串也支持切片这样截取字符串挺方便的

>>> 'ABCDEFG'[:3]
'ABC'
>>> 'ABCDEFG'[-3:]
'EFG'
>>> 'ABCDEFG'[::2]
'ACEG'

运算符

Python 基础语法_第4张图片

python 运算符没有 ===,&&,|| ,多了 **,//,and,or 这几个:

  • ** - 平方,2**3 = 2的3次方= 8
  • // - 整除,10//3 = 3
  • and - & 与逻辑运算符
  • or - | 或逻辑运算符

and,or 大家要是用不习惯,&,| 在 python 里面还是能使的


控制语句

python 的控制语句有if,while,break,continue,for

1. if
# if 语句
if age > 100:
    print(age)
elif age > 80:
    print(age)
else:
    print(age)

注意:

  • if 写不写()都没事
  • 使用:+缩进代替{}包裹方法,真的不是很方便查看,好在 python 自身讲究简洁,代码不多看着还可以
  • else if 在 python 中是 elif

2. for

names = [ 0,2,3,4,56,7,8,9,"AA","BB","CC"]

for name in names:
    print(name)

写着和 kotlin 很像啊

3. while
N = 10
x = 0
while x < N:
    print (x)
    x = x + 1
4. break
sum = 0
x = 1
while True:
    sum = sum + x
    x = x + 1
    if x > 100:
        break
print (sum)
5. continue
for x in L:
    if x < 60:
        continue
    sum = sum + x
    n = n + 1

集合

集合的概念在 python 中并没有变化,但是在 python 中对应的关键字改了,另外 python 还加入了不可变集合:

  • list - list 没变,可变,有序,可重复
  • tuple - 不可变的 list,不可变的是元素值不能改,但是允许添加删除元素
  • dict - map 集合,无序的,key 不可重复
  • set - 无序的,不可重复的,不可变的 list ,和 tuple 很像
1. list
# -*- coding: utf-8 -*-

# 声明 list 集合
names = []
names = [1,2,3,4]
names = [1,"AA",5,"BB","CC"]

# 通过索引获取数据
name = names[0]

# 加-号倒序获取数据,-1最后一个,-2倒数第二个
name = names[-1]
name = names[-2]

# append 在末尾添加数据,insert 在指定位置添加数据
names.append("DD")
names.insert(1,"DD")

# pop 删除数据时会返回该数据
name = names.pop(1)

# 替换数据直接上 index 就行s
names[0] = "AKA"

# 打印 list 集合
print(names)

# let 返回集合元素数量
len(names)

# in 判断 list 内有没有这个值
if 1 in names:
    print( "AA" )
  • 使用[] 声明 list,没有内容就是空集合
  • 集合中可以传入不同数据类型的数据
  • print 方法可以打印集合
  • 通过list[index]获取数据使用上很想数组

整体上感觉就是 java 的组数,整理下 list 专属方法:

  • append - 在 list 末尾添加数据
  • insert - 在指定位置添加数据
  • pop - 删除数据,但是会返回该数据
  • let - 返回集合元素数量
  • in - 判断 list 内有没有这个值

集合的遍历总是又说头的,看这里,Python 也是有花样的

# 遍历思路 1:for
for name in names:
    print(name)

# 遍历思路 2:enumerate(list)
names = [0, 2, 3, "AA", "BB", "CC"]

for index, values in enumerate(names):
    print("index=" + str(index) + ",value=" + str(values))

# 遍历思路 3:高阶函数 - map 
def funtion1(x):
    return x + 2

names = [0, 5, 4, 7, 8, 6, 2, 4, 5]
names = map(funtion1, names)
print(names)

切片 这是 python 自己的说的没,就是截取一部分

names2 = [0, 2, 3, "AA", "BB", "CC"]

names2 = names2[0:3]
print(names2)

注意:0 是从哪个 index 开始,3 是取几个数

蛋疼的是切片也支持 -数,大家看看下面的总结吧:

>>> L = ['Adam', 'Lisa', 'Bart', 'Paul']

>>> L[-2:]
['Bart', 'Paul']

>>> L[:-2]
['Adam', 'Lisa']

>>> L[-3:-1]
['Lisa', 'Bart']

>>> L[-4:-1:2]
['Adam', 'Bart']
2. tuple
names = (1,2,3,)

print(names)

tuple 我是觉得没啥用,也就是能节约些内存,使用()来声明 tuple,这个()会和方法的()冲突,所以最有一个元素后也要写,挺蛋疼的

3. dict

dict python 版的 map 集合,这个大家唉都熟悉,我觉得 python 为啥要给 map 集合改名字,其他语言基本没有动 map 的

# 声明 dict 集合
names = {
    "name1": "AA",
    "name2": "BB",
    "name3": "CC",
    "name4": "DD",
    "name5": "EE",
    57: 88
}

# print 可以直接打印
print(names)

# len 获取 dict 元素数量
print(len(names))

# dict[key] 就可以获取 value 值
print( names["name1"] )

# get 也可以获取 value 值
print( names.get("name2"))

# 判断 dict 内有没有这个值
if "AA" in names:
    print( "AA" )

# dict 赋值直接写就行,key 没有的话相当于添加元素了,key 有的话会更新 value 值
names["AKS"] = 998
names["name1"] = 998
  • dict 内 key 和 value 可以是任何数据类型的,这样的开放结构有好处也有坏处,写起来方便,用起来麻烦
  • 虽然 dict[key] 也起来方便,但是活获取不到值的话会崩,get 方法就不会,没有的话就是 None
  • len - dict 元素数量
  • in - 判断 dict 内有没有这个值

集合的遍历总是又说头的,看这里,Python 也是有花样的

names = { 'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74 }

# 遍历思路 1:  for
for key in names:
    print(names[key])

# 遍历思路 2:  values()
names = names.values()
for name in names:
    print(name)

# 遍历思路 3:  items()
for key, value in names.items():
    print("key=" + key + ",value=" + str(value))

4. set
names = set([0,1,2,3,4,5,6,7,8,9])

# 添加元素
names.add(78)

# 删除元素
names.remove(0)

set 本质上还是 list,所以 set 的构建需要传一个 list 进来,蛋疼的是添加删除元素的方法名字居然和 list 不一样,何必呢,有啥必要,我是看不到,只能说这不是同一个员工写的,每个人都有不同的思路和习惯啊,引申一下,公司内要是不做好代码规范,思路统一,那代码还能看吗,改别人的代码头疼死

set 方法:

  • add - 添加元素
  • remove - 删除元素

函数

基本使用:python 用def指代一个函数,参数不用指定类型,并且可以返回多个值,返回多个值时结果本质上一个 tuple 集合

def add(name1,name2):
    return name1,name2

result = add(1, "AA")
print(result)
print( result[0] )
print( result[1] )
➜  Test python Test.py
(1, 'AA')
1
AA

高阶函数: python 支持高阶函数,高阶函数的本质就是闭包,函数对象化,可以把函数当做一个对象一样作为参数参入,使用

def add(name1,name2):
    return name1,name2

def remove(index1,index2,funtion1):
    return funtion1(index1,index2)

print(remove(0,2,add))
➜  Test python Test.py
(0, 2)

参数默认值 python 允许方法参数有默认值,具体使用时可以xie,也可以不写

def update(name, age=10, index=10):
    print(name + " / " + str(age))

update("AA")
update("AA", 18)
update("AA", age=22, index=16)

可变参数 python 的可变参数必须这样写*args,不能改的,方法的参数中只能有一个可变参数

def speak(name, *args):
    print(name + ":")
    for index in args:
        print("age = " + str(index))

speak("AA", 1, 2, 3, 5, 4, 5, 78)
➜  Test python Test.py
(0, 2)
AA:
age = 1
age = 2
age = 3
age = 5
age = 4
age = 5
age = 78

快速生成集合

从这开始就是属于 python 自己的特长了,其他语言我是没看到过如 python 这般简洁

range range(start,end) 函数可以快速生成从 start - end-1 的集合数据

print(range(0, 10))
➜  Test python Test.py
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

python 的 lambda 表达式 1 [ 表达式 for item名字 in range(start,end) ]

def add(name):
    print(name)

names = [add(name) for name in range(0, 10)]
➜  Test python Test.py
0
1
2
3
4
5
6
7
8
9

python 的 lambda 表达式真的简单,直接在[]这个list构建中就写了,注意这里最好封装成一个方法,要不很多时候会报错,我只想说一句真是省代码

python 的 lambda 表达式 2 这次是使用 dict 来快速生成 list

d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }

tds = ['%s%s' % (name, score) for name, score in d.items()]
print("")
print( '')
print( '\n'.join(tds))
print( '
NameScore
')
➜  Test python Test.py
NameScore
Lisa85
Adam95
Bart59

大家看,模拟一个 html 的表格出来

lambda 加上条件判断语句 lambda 表达式在最后还可以加上 if 作为条件判断语句,注意处理的数据是原始数据,不是经过前面 lambda 处理过后的数据

def add(name):
    return name * 2

names = [ add(name) for name in range(0,20) if name > 15]
print(names)
➜  Test python Test.py
[32, 34, 36, 38]

多层 lambda 表达式 for循环可以嵌套多个

def add(word, number):
    return str(word) + str(number)

names = [add(word, number) for word in "ABC" for number in range(1, 4)]
print(names)
➜  Test python Test.py
['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']

上面这段代码相当于:

L = []
for m in 'ABC':
    for n in '123':
        L.append(m + n)

再体会下,python 的极简注意的确是有只得说道的 ~


你可能感兴趣的:(Python 基础语法)