python教程(一):变量和数据类型

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的内部。

关于变量比较好的文章有

变量的生命周期

变量的生命周期指的是变量从创建到被回收的这段周期。变量在定义的时候被创建,局部变量的生命周期在函数/方法执行完成之后被系统回收。

变量的操作

了解变量的定义,作用域,生命周期之后还需要知道怎样操作变量。这才是我们要迈出去的第一步。不同类型的变量操作不一样,下面分成数字类型,字符串,布尔,元组,列表,集合这几种类型分别说一下其操作。

数字类型

数字类型的变量有四则运算,取模,幂运算,整除。四则运算和取模没啥好说的了。一般语言都支持。下面说一下幂运算和整除。

操作操作符例子
幂运算**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++入门:二、流程控制

这是我的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语言的流程控制都有哪些,语法是什么样的。我将会通过以下步骤来入门go语言1. 变量和数据类型2. 流程控制方法3. 函数声明和调用4. 面向对象5. 语言特性6. 标准库条件分支go语言的条件分支有: if语句,if...else...语句,switch...case...语句。和大多数语言差别不大!if 语句语法// 纯ifif 条件语句 { 表达式}// 带有else 的 ifif 条件语句1 { 表达式1} else 条件语句2 {

python学习笔记:二、 流程控制

根据如何学习一门新的语言这篇文章的指导,现在的步骤就是学习这门语言的流程控制了。通常来讲,流程控制有顺序,选择,循环这几种。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教程:一、变量,函数,控制流程

变量的定义和使用变量的定义bash变量定义很简单。如下:a="hello"左边是变量名,右边是变量值。bash是弱类型,因此不需要给a加上类型。注意,等号两边不能有空格 比如 a = "hello",这是错误的。变量使用变量使用需要在定义的变量名之前加上$,比如我们打印之前定义的aecho $a特殊变量后面再说,现在仅仅是最基础的,能够让自己写出一个完整的脚本就行。流程控制流程控制则是编写程序必备的过程,比如顺序,循环,条件,分支等等。在其他类C语言中有if...else,for,while,do...while,switch,那么在bash里面,这些应该怎么写呢。if...else结构a=0

记录一下使用中PDO出现的一个问题:Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll().

在使用PDO的时候,一条sql语句打死都不执行,dump一下errorInfo试试,出现这样的错误信息问题描述居然告诉我还有语句没有执行完成?当前的查询未能执行,逗我么!考虑使用fetchAll,或者开启缓冲查询,行,你说得对....问题出现的使用场景服务器服务器为linux,安装了一个什么面板套件之类的,不是自家机器,也懒得去折腾,在本地的windows环境并没有该问题。程序笔者在对数据库的一个计数字段进行更新的时候,首先会先查询这个记录是否存在,如果存在则进行更新,如果不存在则先插入。问题就出现在记录不存在的时候,当我查询这条不存在的记录时候,发现这个记录不存在,然后进行插入,发现之前的查

mysql中的alter操作详解

在使用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的用法

shell中的if语法是最让我头疼的语法之一,它的判断就向使用USB插头一样——拿起来插入不行,翻转再插入还不行,再翻转插入行了!为了搞清楚这部分语言,我收集了一些文章关于if条件判断的用法,希望对你也有些帮助。一、基本语法语法说明bash shell会按顺序执行if语句,如果command执行后且它的返回状态是0,则会执行符合该条件执行的语句,否则后面的命令不执行,跳到下一条命令。当有多个嵌套时,只有第一个返回0退出状态的命令会导致符合该条件执行的语句部分被执行,如果所有的语句的执行状态都不为0,则执行else中语句。返回状态:最后一个命令的退出状态,或者当没有条件是真的话为0。注意:1、表

Go入门:一、变量和数据类型

这是学习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++入门:一、变量和数据类型

这是我的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

赞赏

微信赞赏支付宝赞赏

《python教程(一):变量和数据类型》有1条评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注