python笔记

python的一些基本语法

两种模式

命令行进入根目录模式以及输入python交互模式
二者区别:交互模式输入一行就执行一行代码;而命令行根目录模式运行一个.py文件,运行完整个代码。
交互模式中可以用下划线 _ 来查看上一次输出的结果。如果给下划线赋值,这个效果就没了。

输入与输出

print()输出函数可以输入个字符串,在每个字符串,即几段双引号之间的句子中间打逗号,逗号在输出时成为空格
input()输入函数可以接受用户输入,并赋给变量

python语法之“缩进”

以#开头的语句是注释,注释是给人看的,可以是任意内容,解释器会忽略掉注释。其他每一行都是一个语句,当语句以冒号:结尾时,缩进的语句视为代码块

缩进的一个好处是强迫你写出格式化的代码,但没有规定缩进是几个空格还是Tab。按照约定俗成的管理,应该始终坚持使用4个空格的缩进。另一个好处是强迫你写出缩进较少的代码,你会倾向于把一段很长的代码拆分成若干函数,从而得到缩进较少的代码。
缩进的坏处就是“复制-粘贴”功能失效了。当你重构代码时,粘贴过去的代码必须重新检查缩进是否正确。此外,IDE很难像格式化Java代码那样格式化Python代码。
请务必注意,Python程序是大小写敏感的,写错了大小写,程序会报错。if ,else语句后记得用冒号,之前记得给变量赋值,冒号语句后坚持4个空格的缩进

浮点数与整数的表示方法与C一样

整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。
另外:Python的整数没有大小限制

关于字符串中的字符转义与C一样,换行有新方法

另外,为了简化,Python还允许用r’ ‘表示’ '内部的字符串默认不转义

如果字符串内部有很多换行,用\n写在一行里不好阅读,为了简化,Python允许用’’’…’’’(三引号)的格式表示多行内容,可以自己试试:

print(’’‘line1
… line2
… line3’’’)
line1
line2
line3 即可分为三行。 里面的line1,line2,line3即为打印内容,…是回车之后自动生成的,表示接着上一行输入

在Python中,可以直接用True、False表示布尔值(请注意大小写),也可以通过布尔运算计算出来。

and与,or或,not非,进行简单的逻辑运算。

空值
空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。

变量不仅可以是数字,还可以是任意数据类型,且可以反复赋值,类型随时变化!(动态语言的特点)

最后,理解变量在计算机内存中的表示也非常重要。当我们写:
a = ‘ABC’时,Python解释器干了两件事情:
1、在内存中创建了一个’ABC’的字符串;
2、在内存中创建了一个名为a的变量,并把它指向’ABC’。

python的除法

/与//
/除法计算结果是浮点数,即使是两个整数恰好整除,结果也是浮点数。
还有一种除法是//,称为地板除,两个整数的除法仍然是整数。 %为余数运算。

python的字符串与一些重要的字符串函数

首先,python支持多语言,对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符

ord(‘A’)
65
ord(‘中’)
20013
chr(66)
‘B’
chr(25991)
‘文’

python中有两个很好用的函数 decode() 和 encode(),用于编码制转换

decode(‘utf-8’) 是从utf-8编码转换成unicode编码,当然括号里也可以写’gbk’
encode(‘gbk’) 是将unicode编码编译成gbk编码,当然括号里也可以写’utf-8’

由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes。
Python对bytes类型的数据用带b前缀的单引号或双引号表示:x = b’ABC’

要注意区分’ABC’和b’ABC’,前者是str,后者虽然内容显示得和前者一样,但bytes的每个字符都只占用一个字节。要注意区分’ABC’和b’ABC’,前者是str,后者虽然内容显示得和前者一样,但bytes的每个字符都只占用一个字节。(str是字符串类型)

以Unicode表示的str通过encode()方法可以编码为指定的bytes(带b的前缀)
Python对bytes类型的数据用带b前缀的单引号或双引号表示:x = b’ABC’,
纯英文的str可以用ASCII编码为bytes,内容是一样的,
含有中文的str可以用UTF-8编码为bytes。
含有中文的str无法用ASCII编码,因为中文编码的范围超过了ASCII编码的范围,Python会报错。
在bytes中,无法显示为ASCII字符的字节,用\x##显示
反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法:

b’ABC’.decode(‘ascii’)
‘ABC’

更厉害的是:如果bytes中只有一小部分无效的字节,可以传入errors='ignore’忽略错误的字节

b’\xe4\xb8\xad\xff’.decode(‘utf-8’, errors=‘ignore’)
‘中’

要计算str包含多少个字符,可以用len()函数,也可计算bytes的字节数

代码开头:# -- coding: utf-8 -- 用来提示解释器按utf-8读取源代码

python格式化方式

在Python中,采用的格式化方式和C语言是一致的,中间连接部分只用一个%实现。

‘Hello, %s’ % ‘world’
‘Hello, world’
就用了world去代替%s
‘Hi, %s, you have $%d.’ % (‘Michael’, 1000000)
‘Hi, Michael, you have $1000000.’(无print输出就带引号
在字符串内部,有几个%占位符,后面就跟几个变量或者值,顺序要对应好,用括号括起来。如果只有一个%占位符,括号可以省略。(括号前的百分号别少

%s:字符串 %d:整数 %f:浮点数 %x:十六进制整数 注意:%s永远起作用,它会把任何数据类型转换为字符串

另外,格式化整数和浮点数还可以指定是否补0(在数的最左边补0)和整数与小数的位数:
%9.2f 表示输出场宽为9的浮点数,其中小数位为2,整数位为6,小数点占一位,不够9位右对齐。

print(’%2d-%02d’ % (3, 1)) 输出为3-01

有些时候,字符串里面的%是一个普通字符怎么办?这个时候就需要转义,字符串里用%%来表示一个%

另一种格式化字符串的方法是使用字符串的format()方法,它会用传入的参数依次替换字符串内的占位符{0}、{1}……,不过这种方式写起来比%要麻烦得多:

‘Hello, {0}, 成绩提升了{1:.1f}==%’.format(‘小明’, 17.125)
‘Hello, 小明, 成绩提升了 17.1%’(保留一位小数)

list数据类型

Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。
比如,列出班里所有同学的名字,就可以用一个list表示:

>>> classmates = ['huqingnan','jiangjun','wangnengjie']
>>> classmates
['huqingnan','jiangjun','wangnengjie']

变量classmates就是一个list。用len()函数可以获得list元素的个数:

>>> len(classmates)
3

用索引来访问list中每一个位置的元素,记得索引是从0开始的(与数组类似):

>>> classmates[0]
'huqingnan'
>>> classmates[1]
'jiangjun'
>>> classmates[2]
'wangnengjie'

当索引超出了范围时,Python会报一个IndexError错误,所以,要确保索引不要越界,记得最后一个元素的索引是len(classmates) - 1。

>>> classmates[3]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素:

>>> classmates[-1]
'wangnengjie'
以此类推,可以获取倒数第2个、倒数第3个(-2,-3......):
list是一个可变的有序表,则可以对其中的添加,删除和改变、赋值
  • append ,能够将元素加到list的末尾
>>> classmates.append('Adam')
>>> classmates
 ['huqingnan','jiangjun','wangnengjie'.'Adam']

需要注意append使用时的格式为listname.append,括号里要给出具体添加的元素!
  • insert,能够将元素添加到list的指定位置,其余元素顺次后移
>>> classmates.insert(1,'Jack')
>>> classmates
['huqingnan', 'Jack', 'jiangjun', 'wangnengjie', 'Adam']

需要注意insert使用时先声明位置,再给定具体元素
  • pop,能够将list末尾的一个元素从中删除或者指定位置删除
需要注意的是,pop有两种删除元素的方法,有着各自的特点

1.括号内为空的情况
>>> classmates.pop()
'Adam'               			//pop()自动找到的'Adam'
>>> classmates
['huqingnan', 'Jack', 'jiangjun', 'wangnengjie']                //输出结果

2.括号内不为空的情况,即指定位置删除
>>> classmates.pop(1)
'Jack'							//pop(1)自动找到的'Jack'
>>> classmates
['huqingnan', 'jiangjun', 'wangnengjie']

  • 另外,也可以直接用下标索引指定元素进行赋值改变
>>> classmates[1] = 'huantong'
>>> classmates
['huqingnan', 'huantong', 'wangnengjie']
  • list中数据类型不一定要相同
  • 一个list中的元素可以包含另外一个list(“类似”于多维数组,但可能只有一个元素是另外一个list,所以不完全相同)
  • 如果一个list中一个元素也没有,就是一个空的list,它的长度为0

tuble数据类型

这是另一种有序列表。tuple和list非常类似,但是tuple一旦初始化就不能修改,比如同样是列出同学的名字:

classmates = (‘Michael’, ‘Bob’, ‘Tracy’)
现在,classmates这个tuple不能变了,它也没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,你可以正常地使用classmates[0],classmates[-1],但不能赋值成另外的元素

不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。

tuple的陷阱:当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来,比如:

>>> t = (1, 2)
>>> t
(1, 2)

如果要定义一个空的tuple,可以写成():

>>> t = ()
>>> t
()

但是,要定义一个只有1个元素的tuple,如果你这么定义

>>> t = (1)
>>> t
1

定义的不是tuple,是1这个数!这是因为括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1。

所以,只有1个元素的tuple定义时必须加一个逗号,,来消除歧义

>>> t = (1,)
>>> t
(1,)

Python在显示只有1个元素的tuple时,也会加一个逗号,,避免误解。

最后来看一个“可变的”tuple:

>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])

这是因为tuple元组中含有一个list元素,而list中的元素又是可以改变的,但tuple本质上的不可改变(指向不变)仍然成立。

sort 与 sorted 区别:

  • sort 是应用在 list上的方法,sorted 可以对所有可迭代的对象进行排序操作。
  • list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值