float,double
等,很是细致复杂的。这是由于C++的静态语言型导致的。
Python是动态解释型语言,不需要为变量定义数据类型,Python解释器会自动根据变量的值的类型判断,这大大地简化了我们编程时对数据类型的考虑。那现在再来想一想,Python的基本数据类型有哪些呢?数值型Numerbers和字符串String。编程语言的基本数据类型就是这两种,其他都是依此衍生细分而来的。
Numbers数据类型
我们更喜欢称之为数值型,实际上解释器会根据传递的值的不同在底层细分的。我们会看到int,float等。例如在交互式命令行下写下面的程序:
a=1b=2.0print(a)print(b)type(a)type(b)
上面的print()是Python的输出打印函数,最基础的程序结果输出函数。而type()函数是查看对象的类型是什么,这些都是Python的内置函数,先记住就好。结果是a的类型为int,b的类型为float,这个例子的目的是为了说明Python中的数字统称为数值型,但底层还是区分的。
数值型的基本运算
数字是可以进行数学上的加减乘除的运算的,Python中的运算符也是符合数学上的基本运算法则的,其中的+,-,*,/数学中的加减乘除,%不表示百分号,表示取余,这和大多数的编程语言的基本运算符是相同的。//两个“除”表示取整,就是所谓的取商。和前面对应,这很好理解。数学中还有一个很重要的运算——乘方。在Python用两个乘号**表示。比如下面的程序,结果可以口算:
17+1515-1517*1517/1517%517//55**3
口算可能会算错,但是程序不会,他就是这么地“忠诚”,你说啥,它做啥,前提是你得会说(表达),我想这可能是编程代码叫做编程语言的原因之一吧。
变量初识
我们在交互式编程环境总是输入数字进行运算,完成一次运算后,我们就不能方便地再次使用之前的数字,需要用一个容器来存储之前输入的数字,这个容器就是:变量。其实变量,它就是在内存中开辟一块的地址,变量名就是这块地址的名字。但是在Python不一定是这样子的,后面会涉及。之前说到Python在定义变量的时候,不需要指定变量的数据类型,是的,只需要将数据对象赋值"="给变量即可。在使用变量的时候,很容易会遇到错误的,类似这样子:
这就是变量未定义的错误,属于NameError,我们平白无故地给Python解释器输入了一个n,Python的内心是这样子的:我是谁?我在哪?n是啥?它不认识,当然会报错了。正确的变量使用需要先定义,不需要像C++一样声明。所谓定义就是:给变量赋值"="。例如下面求矩形面积的代码:
width=10height=20print(width*height)
变量的命名规则,这个是常识也是需要遵循的:
命名的规则就像我们人起名字一样,既要好听好记,又要有意义。Python的保留字,后面会慢慢遇见,比如:if else as 等。一个有意思的变量——下划线:`_`。在交互式命令行中,下划线表示最后一次被打印输出的变量。什么意思呢?如果你用过matlab,那么你一定见过这个东西:
ans每次在命令行输入一个东西,但是没有用变量来接收,它会自动赋值给变量ans,在Python就是用下划线来代替了ans而已。比如输入下面的代码:
10*201*2_
最后输入的"_"就会当成是最后一次输出结果2。
Strings数据类型
字符串,简单说就是用引号引起来的东西。这里的引号包括单引号,双引号,三单引号。为什么Python中对字符串的理解这么多呢?我也不知道,他们是各有各的用法,Python中只有字符串这个概念,没有字符这个概念(c++有)。字符串也是一种数据类型,我们先看下面的代码:
print('hello,world,我Hi华仔啦!')print("hello,world,我Hi华仔啦!")print('''hello world!我Hi华仔啦!''')
三单引号的字符串,很明显地不同于前面两种,
前两种字符串是不能直接手动进行换行的,只能在一行中书写。每一行叫做一个物理行,Python解释器在解释运行代码时以物理行为基准,除非将它变为逻辑行,所谓逻辑行,就是告诉Python,我这里换行了哦!不是语法错误。
三单引号就包含了逻辑行的信息,可以直接换行,它同时是一个预格式字符串,就是三单引号里面是怎么输入的,就怎么输出。相当于Html中的pre标签。前两种不行,非要在编辑的时候换行怎么办?加上一个反斜杠即可。
print('hello world,\ 我Hi华仔啦!')
另外想实现上面的需求可以这样子做:
a=('hello world,' '我Hi华仔啦!')
其实这种方法很偏门,不是很常用,原理就是Python会认为:如果两个字符串的中间只有空格,,那么他会识别为这是一个字符串。例如:
print('Py' 'thon')
单引号和双引号配合使用起来,可以满足一些特定的需求,一般规则就是单双引号混用,不可同时用。比如引用话语时:
momsaid='Mom said:"Do I make it clear? "'print(monsaid)
字符串的一些常用操作符:
字符串的运算符只有加和乘,没有减和除,这是和数值型不同的。
print('1001'+'0100')print('我Hi华仔啦!'*3)
字符串的索引和切片。使用下标来进行索引和切片。
字符串是一种特殊的序列类型,序列是一种数据结构(后面会提到),它具有部分的序列一般方法,索引和切片就是其中之一。在Python中,下标都是从0开始的,递增地依次往后地推。习惯了C++数组的操作看着很顺眼,相比于R和matlab中的索引从1开始,还有点不习惯。
Python的字符串支持从后开始索引,使用中括号[]索引,-1表示最后一个字符,递减地依次向前推。切片包括前面,不包括后面,是一个“左闭右开的区间”。索引是可以指定步长的,默认为1,如果步长为-1,表示从后到前索引,默认是从前往后的索引顺序。如果省略第一个索引位置,那么默认是从第一个字符开始,同样地,如果省略了最后一个索引位置,那么一直索引到最后一个字符。
a='hello world'print(a[0],a[1],a[-1],a[-2],sep='\t')print(a[0:3],a[:0],a[1:5],a[2:],a[:-4:-1],a[-1:-4],sep='\t')
注释
在Python中的单行注释,以#开头,为了规范书写,空一格再写注释内容即可。多行注释,使用三单引号引起来,它也是字符串的表示方法之一。
# print('这是单行注释!')'''这是多行注释内容!Do I make it clear?'''
好了,本期就聊到这里了,下期见。
Python的数据类型有哪些呢?我们学过C++语言,其中的数据类型分的很细致,整数有整型,整型又分为int,short int,long int型等,小数有float,double等,很是细致复杂的。这是由于C++的静态语言型导致的。Python是动态解释型语言,不需要为变量定义数据类型,Python解释器会自动根据变量的值的类型判断,这大大地简化了我们编程时对数据类型的考虑。那现在再来...
如果你想生成v1,v2...v100这一百个
变量
,使用其他静态编译语言只能在代码中手动写出这100个
变量名
,但是在
python
中可以使用循环方便地动态生成。
python
中有一个函数locals(),
定义
是:
locals(...)
locals() -> dictionary
Update and return a dictionary containin
在
Python
中,可以使用关键字`None`来表示一个空值或者未知值。可以将一个
变量
初始化为`None`,表示该
变量
还没有被赋值,同时也不知道它的数据类型。例如:
```
python
x = None
在后续的代码中,可以根据实际情况对
变量
`x`进行赋值,例如:
```
python
x = 10 # x现在是一个整数
x = "hello" # x现在是一个字符串
当然,如果要在函数或者类中声明一个未知类型的
变量
,可以使用`typing`模块中的`Any`类型,例如:
```
python
from typing import Any
def my_function(x: Any):
# 在函数内部可以使用
变量
x,但是不知道它的具体类型