python的基本数据类型有整型,浮点型,字符串,布尔,列表,元组,字典,集合。它们占用内存和定义方式如下表:
类型 | 占用内存 | 如何定义 |
整型(int) | 动态长度>=24字节 | a = 1 |
浮点型(float) | 动态长度>=24字节 | a = 1.0 |
字符串(string) | 动态长度,>=37字节,增加一个字符加1字节 | a = 'str' |
布尔(boolean) | 24字节 | a = True |
列表(list) | 动态长度,>=72字节 | a = [] |
元组(tupe) | 动态长度,>=56字节 | a = () |
集合(set) | 动态长度,>=232字节 | a = set([]) |
占用的内存通过sys.getsizeof()获取。
python中的变量分为可变和不可变类型,其中数字,字符串,元组是不可变类型。因此可以安全地对数字或者字符串进行运算,不会改变原值。字典和列表是可变类型,因此对字段和列表进行某些运算的时候是可以改变原值的,运算时候需要小心。
作用域
知道变量几种类型之后,接下来就需要了解这门语言变量的作用域了。python中的作用域类型比较多,和一般只有局部和全局作用域不太一样,python有四种作用域。
- L (Local) 局部作用域
- E (Enclosing) 闭包函数外的函数中
- G (Global) 全局作用域
- B (Built-in) 内建作用域
以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。
是在函数,模块,类中定义的变量是局部作用域,意思就是定义的变量只有在函数,模块,类中才能使用,外部是不可使用的。
def a():
i = 1
print(1)
a()
print(i)
# 输出
1
Traceback (most recent call last):
File "variable.py", line 11, in
print(i)
NameError: name 'i' is not defined
可以看到i在外部是没有被定义的,只存在于函数a的内部。
关于变量比较好的文章有
- http://blog.csdn.net/cc7756789w/article/details/46635383
- https://docs.lvrui.io/2016/07/12/Python%E7%9A%84%E5%8F%98%E9%87%8F%E4%BD%9C%E7%94%A8%E5%9F%9F/
- https://www.cnblogs.com/guigujun/p/9926446.html
变量的生命周期
变量的生命周期指的是变量从创建到被回收的这段周期。变量在定义的时候被创建,局部变量的生命周期在函数/方法执行完成之后被系统回收。
变量的操作
了解变量的定义,作用域,生命周期之后还需要知道怎样操作变量。这才是我们要迈出去的第一步。不同类型的变量操作不一样,下面分成数字类型,字符串,布尔,元组,列表,集合这几种类型分别说一下其操作。
数字类型
数字类型的变量有四则运算,取模,幂运算,整除。四则运算和取模没啥好说的了。一般语言都支持。下面说一下幂运算和整除。
操作 | 操作符 | 例子 |
幂运算 | ** | a = 2**4 print(a) #输出 16 |
整除 | // | a = 4//3 print(a) # 向下取整 1 |
字符串类型
python字符串类型的操作就比较多了,非常灵活。简单的可以分为连接,替换,截取,分割,查找这几种。由于python是面向对象的语言,在python中一切皆为对象,因此字符串也是一个对象,拥有一些内建的方法。字符串操作中会使用到一些内建方法而不仅仅是操作符。
操作 | 操作方法 | 例子 |
连接 | + | a = 'hello' b = 'world' print(a+b) # 输出 helloworld |
替换 | replace(from, to) | a = 'hello' b = a.replace('h', 'a') print(b) #输出 alleo |
截取 | 字符串[开始索引:结束索引:步长] | a = 'hello' print(a[0]) # 取第一位字符 print(a[0:2]) # 取第1位到第二位字符 print(a[-1]) # 取倒数第一位字符 print(a[::-1]) #翻转 |
由于字符串切片比较灵活,特别说一下
字符串切片的规则是,字符串[开始索引:结束索引:步长],开始索引,结束索引,步长都是可正可负的。开始索引负数表示从末尾往前数,结束索引同理。
步长为正值,开始索引默认为0, 结束索引默认为最后是len()+1,从开始索引从左往右走;步长为负值, 开始索引默认为-1, 结束索引默认为开始,不能认为是0,也不能认为是-1,从开始索引从右往左走。
这几个正负组合,可以弄出很多花样,比如将一个字符串翻转就可以使用[::-1]
列表
python的控制语句
一门语言的控制语句基本包括顺序语句,条件语句,循环语句,python也不例外。
条件判断
顺序语句就是一条一条执行的语句,没什么好说的,看看python的条件语句,python的条件语句是
if [条件]: [执行语句1] else: [执行语句2]
多个条件的语句是
if [条件1]: [执行语句1] elif [条件2]: [执行语句2] else: [执行语句3]
循环
python中只有有for循环和while循环。
for循环语法
for [临时变量] in [范围列表]: [执行语句]
python的for循环是一个遍历的过程,如下
for i in range(0,10): print i
while循环语法
while [条件]: [执行语句]
while 语句是一个达到条件就永远执行下去的语句。
比如
i =10 while i > 0: print i i -= 1 # python 没有i--和i++语句 pass #有时候为了美观,写上一句pass
配合循环用到的语句还有break和continue,break语句跳出最深层次的循环,continue跳出一次循环。python还有一个pass语句,这个语句什么也不干,为了对齐美观可以写上。
字符串处理
需要了解的是对字符串处理,对数字处理,类型转换的函数。
字符串切片
a = "hello" a[1] #第1个位置的字母e(位置从0开始) a[1:3] # el,相当于左闭右开的区间[1,3) a[1:] #从第一个到最后的字符串 ello a[:2] #从第0个位置开始到第二个位置之前的字符串, a[-1] #最后一个位置的字符 a[:-1] #从最开始到倒数第二个位置的字符,相当于[0,-1)
日期和时间处理
日期和时间处理需要使用到datetime模块,因此需要 import datetime。datetime模块支持一些日期运算,获取当前日期,格式化日期等方法。比如需要获取今天的日期
>>> import datetime >>> datetime.date.today().strftime("%Y-%m-%d") '2018-02-24'
想要更详细的了解datetime模块就要去查看文档了,这不是一个小小的篇幅就能做到的。
你可能还喜欢下面这些文章
这是我的C++学习笔记第二篇,学习流程控制语句我的学习路径如下:1. 变量和数据类型2. 流程控制3. 函数声明和调用4. 面向对象5. 标准库顺序顺序语句为一条一条顺序执行的语句。C++的顺序语句有赋值,四则运算,位运算,逻辑运算等条件C++提供两种条件,一个是if条件语句,另一个是switch选择语句。if条件switch条件循环循环语句有while循环,for循环,do...while循环。while 循环条件为真,就一直执行语句。如果初次条件不为真,语句一次都不会执行。for 循环更简单的for循环,范围for循环。类似与遍历的效果,序列可以是一个数组,vector,string等迭代
这是我的go语言学习笔记的第二篇,go语言的流程控制。流程控制是计算机语言的基本组成部分。一般的流程控制有顺序,分支,循环。这次来学习一下go语言的流程控制都有哪些,语法是什么样的。我将会通过以下步骤来入门go语言1. 变量和数据类型2. 流程控制方法3. 函数声明和调用4. 面向对象5. 语言特性6. 标准库条件分支go语言的条件分支有: if语句,if...else...语句,switch...case...语句。和大多数语言差别不大!if 语句语法// 纯ifif 条件语句 { 表达式}// 带有else 的 ifif 条件语句1 { 表达式1} else 条件语句2 {
根据如何学习一门新的语言这篇文章的指导,现在的步骤就是学习这门语言的流程控制了。通常来讲,流程控制有顺序,选择,循环这几种。python也不例外,也有这三种流程控制。下面的一一学习。顺序顺序语句很简单,从上往下依次顺序执行。如:a = 1b = 2print(a+b)上面的语句就是顺序执行的语句。选择选择通常使用if和switch,但python中只有if这一个选择语句。语法是:if 满足条件1: 语句1elif 不满足条件1满足1条件2 语句2else 都不满足 语句3比如用一个实际的例子a = 1b = 2if a > b: print('a>b')el
变量的定义和使用变量的定义bash变量定义很简单。如下:a="hello"左边是变量名,右边是变量值。bash是弱类型,因此不需要给a加上类型。注意,等号两边不能有空格 比如 a = "hello",这是错误的。变量使用变量使用需要在定义的变量名之前加上$,比如我们打印之前定义的aecho $a特殊变量后面再说,现在仅仅是最基础的,能够让自己写出一个完整的脚本就行。流程控制流程控制则是编写程序必备的过程,比如顺序,循环,条件,分支等等。在其他类C语言中有if...else,for,while,do...while,switch,那么在bash里面,这些应该怎么写呢。if...else结构a=0
在使用PDO的时候,一条sql语句打死都不执行,dump一下errorInfo试试,出现这样的错误信息问题描述居然告诉我还有语句没有执行完成?当前的查询未能执行,逗我么!考虑使用fetchAll,或者开启缓冲查询,行,你说得对....问题出现的使用场景服务器服务器为linux,安装了一个什么面板套件之类的,不是自家机器,也懒得去折腾,在本地的windows环境并没有该问题。程序笔者在对数据库的一个计数字段进行更新的时候,首先会先查询这个记录是否存在,如果存在则进行更新,如果不存在则先插入。问题就出现在记录不存在的时候,当我查询这条不存在的记录时候,发现这个记录不存在,然后进行插入,发现之前的查
在使用mysql的客户端之后,手动输入语句的机会减少太多,比如mysql的alter语句竟然想不起来怎么用了,于是重新学习一下。alter是用来修改表结构的语句。既然是修改,那么可分为增加,修改,删除这几种。大致的操作如下ALTER TABLE 表名称 操作(ADD|DROP|CHANGE|RENAME) 操作内容列操作相关1.增加列ALTER TABLE table_name ADD new_column_name VARCHAR(255) NOT NULL2.删除列ALTER TABLE table_name DROP a_column3.修改列ALTER TABLE table_name
shell中的if语法是最让我头疼的语法之一,它的判断就向使用USB插头一样——拿起来插入不行,翻转再插入还不行,再翻转插入行了!为了搞清楚这部分语言,我收集了一些文章关于if条件判断的用法,希望对你也有些帮助。一、基本语法语法说明bash shell会按顺序执行if语句,如果command执行后且它的返回状态是0,则会执行符合该条件执行的语句,否则后面的命令不执行,跳到下一条命令。当有多个嵌套时,只有第一个返回0退出状态的命令会导致符合该条件执行的语句部分被执行,如果所有的语句的执行状态都不为0,则执行else中语句。返回状态:最后一个命令的退出状态,或者当没有条件是真的话为0。注意:1、表
这是学习Go语言的第一篇笔记,主要学习的是变量和基本数据类型。如果您也在开始学习Go语言,那么这篇笔记一定能帮助您学习的更快!我的语言学习过程一般分为下面几个:1. 变量和数据类型2. 流程控制方法3. 函数声明和调用4. 面向对象5. 语言特性6. 标准库变量声明Go语言的变量声明有三种第一种,var identifier type// 先声明后赋值var identifier typeidentifier = value// 声明并且赋值var identifier type = value开始实战一下!比如声明一个int类型变量var i inti = 1// 或者var i int =
这是我的C++学习笔记第一篇,同所有的程序语言学习路径一样,首先学习的是变量和数据类型。我的学习路径如下:1. 变量和数据类型2. 流程控制3. 函数声明和调用4. 面向对象5. 标准库这一章,学习的是变量和数据类型,需要了解的有:了解这些,对于变量基本就够了。Hello world在开始之前,先写一个hello world来熟悉一下程序的主要结构以及如何打印一个变量。iostream提供标准输入输出的头文件,程序以main函数问入口,std为标准库的命名空间,“<<” 为输出操作符,std::cout为标准输出,std::endl为结束符,表示将等待输出的内容从内存传送到标准输出
解决sqlite中union的子句不能使用order by和limit问题
有一种场景,我们需要在同一张表中找出几个分类的文章,并且按照时间排序,通常我们会这样写(假设表名称是post):SELECT * FROM post WHERE category_id=1 ORDER BY create_time DESC LIMIT 10如果有多个分类,我们会考虑将几个语句使用union all连接SELECT * FROM post WHERE category_id=1 ORDER BY create_time DESC LIMIT 10UNION ALLSELECT * FROM post WHERE category_id=2 ORDER BY create_tim