最近学习了python3的语法,整理记录一下; 语法是编程的先决条件,精通语法是编好程序的必要条件
导语
给我最大的感觉是:这个语言的编写,居然不使用
{ }
来控制代码块的区域,而是使用缩进来分割代码块,所以使用python语言编写的代码不能压缩混淆。能够简写就简写,绝不拖泥带水
在python编程的世界里面,广为传颂的名言:Life is Simple ,I Use Python
;python语言相对于其他语言来说,最大的特点是:简洁。为什么呢?来看一个变量交互的例子:
# 很多语言中,需要一个临时变量来交换
temp = x
x = y
y = temp
# 在python中
x,y = y,x //实现了x与y的值相互交换
复制代码
python的功能很强大,可以做爬虫,自动化运维与自动化测试,大数据与数据分析(Spark),AI(机器学习 Tensor Flow),Web开发(Flask,Django),脚本处理。还可以跨平台运行,是面向对象的语言,又有动态脚本的特性(和Javascript一样,属于解释型语言,不用编译成二进制文件;编译型语言会编译成二进制文件供机器执行,相对而言运行效率高)。
python语言也被称作为:胶水语言,可以混合其他如C++,Java等来编程;可以把其他语言制作的各种模块(尤其是C/C++)很轻松的联结在一起。
很喜欢的两句话:
# python 之禅
Simple is better than complex.
简洁胜于复杂;
这和Steve Jobs的苹果系列产品的理念是一致的
Now is better than never. Although never is often better than right now.
做也许好过不做,但不假思索就动手还不如不做;
勤于思考,分析导致问题的原因,不做无用功
复制代码
- 编程是为了解决我们的问题而存在的一个工具。
- 当遇到问题的时候,随手拿起python,编写一个工具,这才是python正确的打开方式
- 什么是扎实的编程功底:数据结构才是基础
基础语法
代码:是现实世界事物在计算机世界中的映射; 写代码:是将现实世界中的事物用计算机语言来描述
在计算机中,怎么样来表示现实世界的事物?
- 基本数据类型
基本数据类型
- Number(数字)
- 整数:int
- 浮点数:float
- 布尔:bool
- 复数:complex
- Str(字符串)
- List(列表)
- Tuple(元组)
- Sets(集合)
- Dict(字典)
python3中的浮点数不分精度(单/双),整型不分短和长(short / long);布尔值一定是大写的True / False
;列表使用[ ]
,元组使用( )
,集合使用{ }
,字典使用{ k:v }
type(1+1.0) # 1.1 float
type(2 / 2) # 1.0 float
type(2 // 2) # 1 int
a = 123 # 不需要写变量的类型
isinstance(a,int) # True
复制代码
上面代码里面,type()
函数来检查变量的数据类型,也可以使用isinstance
来判断一个变量是否属于这个类型;区别在于:
type()不会认为子类是一种父类类型。
isinstance()会判断子类是否是父类的类型。
复制代码
-
/
:表示除法,结果自动转为float类型,会有余数; -
//
:表示整除,求的是整数部分,不会四舍五入,返回的整数类型取决与后面数的类型; -
**=
:幂赋值运算符,相当于次方的概念 -
%=
:取模赋值运算符
a=(-1)%256 // 255
运算的思路:
1. 先计算整数部分:c=a/b ====> c = (-1) / 256 = -1
2. 再计算模:r=a-c*b ====> (-1)-(-1)*256=255
复制代码
声明变量不需要在前面写上变量的类型,直接写一个变量名就行,系统会自动判断类型,不像其他语言要标明数据类型,或者是写上var/ let/ const
<>
:表示值是否不等于,
格式化输出
age = 18;
print("我的年龄是%d岁"%age) // 输出 我的年龄是18岁
name = "xiaoming"
sex = "男"
print("大家好,我叫%s,是一个可爱的%s生"%(name,sex)); // 输出 大家好,我叫xiaoming,是一个可爱的男生
复制代码
上面的代码中%
符号,就是格式化的输出,当变量是那种类型,那么%
后面接的类型也是那一种。
那么输入就是input()
函数,里面接收一个表达式,返回输入的表达式。都是返回的字符串类型。
字符串,元组,列表
字符串是不可变的;这三种都是有序的
- 重复表示
print("icessun"*3)
>>> 'icessunicessunicessun'
# 元组的重复 元组里面可以有不同的数据类型 (1,‘1’,True,[1,2,4])
(1,2,3)*3
>>> (1,2,3,1,2,3,1,2,3)
# 在元组后面添加元素 使用append()方法
b = [1,2,3]
b.append(4)
print(b)
>>> [1,2,3,4]
# 元组使用+相加
(1,2,3)+(2,3,4)
>>> (1,2,3,2,3,4)
# 列表的重复
['ice','icess']*3
>>> ['ice','icess','ice','icess','ice','icess']
复制代码
- 切片操作
[起始位置,长度];
截取从起始位置,长度个字符; 长度负数表示删除从字符串末尾往前数的字符个数; 长度省略表示到末尾; 长度要是超过可截取的位数,以可截取的位数为标准;
a = 'icessun'
print(a[0:4])
>>> 'ices'
print(a[0:-2])
>>> 'icess'
print(a[0:])
>>> 'icessun'
print(a[1:-0])
>>> ' ' # 表示截取了一个空字符串
print(a[1:0])
>>> ' ' # 表示截取了一个空字符串
print(a[:-4])
>>> 'ice'
print(a[-4:])
>>> 'ssun' # 起始位置为负数是表示从末尾开始数(从1开始数)到末尾,要是起始位置是负数,那么步长一定省略,否者得到的是空字符串
复制代码
- 内部元素的访问
# 都是通过索引来访问的
"icessun"[0]
>>> 'i'
['a','b','c'][0]
>>> 'a'
('a',2,True)[2]
>>> True
# 都可以使用len()这个函数来求长度
复制代码
- 单一的字符串索引操作得到的是字符串,但是一个列表的切片操作得到的是一个列表
a = 'icessun'
type(a[0:4])
>>> <class 'str'>
["ice","icess","icessun"][0]
>>> 'ice' # 是字符串
["ice","icess","icessun"][0:2]
>>> ["ice","icess"] # 是列表
复制代码
- 注意
type( (1) )
>>> <class 'int'>
type( ('a') )
>>> <class 'str'>
复制代码
一般来说:( )
可以表示元组,也可以表示数学运算的优先级;所以当想表示一个只有一个元素的元组,应该这样:( (1,) )
;在元素的 后面加上一个逗号;表示一个空的元组:( ( ) )
集合
无序的,不能通过索引访问,里面的元素不重复
- 判断一个元素是否在集合里面,这个方法也适合上面的数据类型
1 in {1,2}
>>> True
3 not in {1,2,3,4}
>>> False
复制代码
- 集合的操作
# 集合的差集 去掉相同的元素,以前面集合为标准,从一个集合里面去掉后面集合特有的元素
{1,2,3}-{2,3}
>>> {1}
{1,2,3}-{4}
>>> {1,2,3}
{1}-{4,2,3}
>>> {1}
# 集合的交集 找两个集合的公有元素
{1,2,3}&{2,3}
>>> {2,3}
{1,3}&{2}
>>> set( ) # 表示空集 len(set()) -----> 0
# 集合的并集 把两个集合合并在一起,按照从前往后的顺序,去掉相同的元素
{1,2,4}|{2,3}
>>> {1,2,4,3}
复制代码
- 注意
# 空集合的表示
set()
复制代码
字典
{ key : value},键值对的形式,类似于Javascript中的对象
- key的取值是不可变的类型:
int,str,元组
- 空的字典:
{ }