LuffyX学习笔记1

这篇博客详细介绍了Python编程的基础知识,包括Python的发展史、主要种类、常用框架和字符编码。此外,还深入探讨了变量的定义规范、命名习惯和常量。在数据类型部分,讲解了数字、字符串、元组、列表、字典和集合的特性和操作方法。最后,涵盖了Python中的运算符和逻辑控制结构,如if、while和for循环。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、python介绍

1.编程语言

机器语言
汇编语言
高级语言:

  • 编译型:C、C++,执行速度快,跨平台差
  • 解释型:Python、JavaScript、Perl、Shell,跨平台好,执行速度慢,依赖解释器运行
    在这里插入图片描述

2.python发展史

1989年,Guido开始写Python语言的编译器
1991年,第一个Python编译器诞生
1994年,python1.0
2000年,python2.0
2008年10月,python2.6
2010年,python2.7
2008年12月,python3.0

3.种类

CPython
IPython
PyPy
Jython
IronPython

4.框架

  • 异步高并发的主流框架Tornado
  • 强大的插件扩展的flask
  • 轻量级bottle框架
  • 完美的django重型框架

5.字符编码

ASCII:占1个字节,只支持英文
GB2312:占2个字节,支持6700+汉字
GBK:GB2312的升级版,支持21000+汉字(中文2个字节,windows默认支持)
Unicode:2-4字节 已经收录136690个字符,并还在一直不断扩张中…(中文2个字节,英文2个字节,兼容GBK)(但是,文件的储存和传输不能使用unicode)
UTF-8:使用1、2、3、4个字节表示所有字符;优先使用1个字符、无法满足则使增加一个字节,最多4个字节。英文占1个字节、欧洲语系占2个、东亚占3个,其它及特殊字符占4个(中文3个字节)

在看实际代码的例子前,我们来聊聊,python3 执行代码的过程
解释器找到代码文件,把代码字符串按文件头定义的编码加载到内存,转成unicode
把代码字符串按照语法规则进行解释,
所有的变量字符都会以unicode编码声明

  • python3
    1.文件默认编码是UTF-8
    2.字符串编码是unicode
    4.bytes与str不等同
    5.所有unicode字符编码(encode)后都会变成bytes格式。除了unicode以外的编码字符在python3中显示成bytes格式

  • python2
    1.文件默认编码是ASCII
    2.字符串编码默认是ASCII
    如果文件头声明了gbk,那字符串的编码就是gbk
    3.在python里,unicode是一个单独的数据类型,用u‘路飞’表示
    4.bytes与str等同(len一个str的数量是bytes的数量)
    4.1在UTF-8编码下,
    len(‘路飞’)得出来的数为6,
    len(u’路飞’)得出来的数为2。
    所以在python2里,unicode类型才是真正的“字符串”,而str类型应该是“字节串”。
    在python3里,这个问题就得到了解决,str类型变成真正的“字符串”了

解码

解码是将字节序列转化为Unicode字符串的过程。我们从外界文本源(文件、数据库、网站、网站API等)获得的所有文本都是经过编码的字节串。重要的是需要知道它是以何种方式编码的,这样才能逆转编码过程以获得Unicode字符串。

编码

编码是将字符串(str)转化为一些列字节(bytes)的过程。

二、变量

在python里,内存自动回收;删除变量内存方式用del

1.定义规范:

变量名只能是字母、数字或下划线的任意组合
变量名的第一个字符不能是数字
一些关键字不能声明为变量:class、global、import等等python语法里的内部指令

2.命名习惯

驼峰体
AgeOfOldboy=56
下划线(优先使用)
age_of_oldboy=56

命名大忌
变量名为中文、拼音
变量名过长
变量名词不达意

3.常量

全部大写如PAI

三、数据类型

Python3 的六个标准数据类型中:

不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。

1.数字

Python3 支持 int(整型)、float(浮点型,不包含无限不循环小数)、bool、complex(复数)。
在Python 3里,只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。

2.字符串 str

不可变,更改时其实是新建一个内存地址

s1='hello world'
s1.capitalize(), Hello world
s1.center(20,'*'), ****hello world*****
s1.count('o'), 2
s1.find('world'), 6
s1.index('world'), 6
s1.isdigit(), False
s1.isalpha(), False
s1.join('$$$$'), $hello world$hello world$hello world$
s1.lower(), hello world
s1.upper(), HELLO WORLD
s1.ljust(5,'$'), hello world
s1.replace(s1,'i am the world'), i am the world
s1.split(), ['hello', 'world']
s1.strip(), hello world
s1.title(), Hello World
2.1 capitalize()

将字符串的第一个字母变成大写,其他字母变小写。
需要注意的是:
1、首字符会转换成大写,其余字符会转换成小写。
2、首字符如果是非字母,首字母不会转换成大写,会转换成小写。

2.2 center(width[ fillchar])

返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。
width – 字符串的总宽度。如果 width 小于字符串宽度直接返回字符串,不会截断
fillchar – 填充字符。只能是单个字符

2.3 count(sub, start= 0,end=len(string))

用于统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置。
sub – 搜索的子字符串
start – 字符串开始搜索的位置。默认为第一个字符,第一个字符索引值为0。
end – 字符串中结束搜索的位置。字符中第一个字符的索引为 0。默认为字符串的最后一个位置。

2.4 find(str, beg=0, end=len(string))

用于检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果指定范围内如果包含指定索引值,返回的是索引值在字符串中的起始位置。如果不包含索引值,返回-1。
str – 指定检索的字符串
beg – 开始索引,默认为0。
end – 结束索引,默认为字符串的长度。

2.5 index(str, beg=0, end=len(string))(str里尽量用find而不用index)

用于检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,该方法与find()方法一样,只不过如果str不在 string中会报一个异常。
str – 指定检索的字符串
beg – 开始索引,默认为0。
end – 结束索引,默认为字符串的长度。

2.6 isdigit()

用于检测字符串是否只由数字组成。

2.7 isalpha()

用于检测字符串是否只由字母组成。

2.8 join(sequence)

用于将序列中的元素以指定的字符连接生成一个新的字符串。
sequence – 要连接的元素序列。

2.9 lower() upper()

lower() 方法转换字符串中所有大写字符为小写。
upper() 方法转换字符串中的所有小写字符为大写。

2.10 ljust(width[, fillchar])

返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。
width – 指定字符串长度。
fillchar – 填充字符,默认为空格。

2.11 replace(old, new[, max])

把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。
old – 将被替换的子字符串。
new – 新字符串,用于替换old子字符串。
max – 可选字符串, 替换不超过 max 次

2.12 split(str="", num=string.count(str))

通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则仅分隔 num+1 个子字符串
str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
num – 分割次数。默认为 -1, 即分隔所有。

2.13 strip([chars])

用于移除字符串头尾指定的字符(默认为空格)或字符序列(如换行符)。
注意删除多个字符时:只要头尾有对应其中的某个字符即删除,不考虑顺序,直到遇到第一个不包含在其中的字符为止。

str = '123132231213321312==321312213231123132'
print(str.strip('123'))
打印结果为
==
2.14 title()

返回"标题化"的字符串,就是说所有单词的首个字母转化为大写,其余字母均为小写

2.15 格式化输出

%s 格式化字符串
%d 格式化整数
%f 格式化浮点数字,可指定小数点后的精度
%x — hex 十六进制
%d — dec 十进制
%o — oct 八进制

2.16 format 格式化函数

Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。
基本语法是通过 {} 和 : 来代替以前的 % 。
format 函数可以接受不限个参数,位置可以不按顺序。

>>>"{} {}".format("hello", "world")    # 不设置指定位置,按默认顺序
'hello world'
 
>>> "{0} {1}".format("hello", "world")  # 设置指定位置
'hello world'
 
>>> "{1} {0} {1}".format("hello", "world")  # 设置指定位置
'world hello world'

3.元组 tuple

for x in (1, 2, 3): print (x,)
打印结果为
1
2
3

4.列表 list

列表是一个有序集合

关键字end可以用于将结果输出到同一行,或者在输出的末尾添加不同的字符

for x in [1,2,3]:print (x,end='')
打印结果为
1 2 3

下面示例演示了列表的大部分方法:

count计数

>>> a = [66.25, 333, 333, 1, 1234.5]
>>> print(a.count(333), a.count(66.25), a.count('x'))
2 1 0

插入、追加

>>> a.insert(2, -1)
>>> a.append(333)
>>> a
[66.25, 333, -1, 333, 1, 1234.5, 333]

索引

>>> a.index(333)#索引
1

移除、删除

>>> a.remove(333)#移除
#pop:删除最后一个元素
>>> a
[66.25, -1, 333, 1, 1234.5, 333]

反转

>>> a.reverse()
>>> a
[333, 1234.5, 1, 333, -1, 66.25]

排序

>>> a.sort()
>>> a
[-1, 1, 66.25, 333, 333, 1234.5]

enumrate #枚举

copy #复制

copy()和“=”赋值的区别:
使用“=”直接赋值,是引用其内存地址,更改一个,另一个同样会变, 例子中的a,b改变两次都影响到了对方
copy() 则顾名思义,复制一个副本,是新建一个内存地址,原值和新复制的变量互不影响。
但是,copy() 只是是浅度复制,深度复制还需要借助python的copy工具

a=[0,1,2,3,4,5]
b=a
c=a.copy()

del a[1]  
'''
   各变量值为:
   a=[0, 2, 3, 4, 5]
   b=[0, 2, 3, 4, 5]
   c=[0, 1, 2, 3, 4, 5]
'''

b.remove(4)
'''
   各变量值为:
   a=[0, 2, 3, 5]
   b=[0, 2, 3, 5]
   c=[0, 1, 2, 3, 4, 5]
'''

c.append(9)
'''
   各变量值为:
   a=[0, 2, 3, 5]
   b=[0, 2, 3, 5]
   c=[0, 1, 2, 3, 4, 5, 9]
'''

4.1索引–可用于字符串、元组、列表

[起始:终止:步长]
起始和终止遵循左闭右开(太白说的顾首不顾腚)

5.字典 dict

特性:

  • key-value结构
  • key必须可hash、且必须为不可变数据类型、必须唯一
  • value可存放任意多个值、可修改、可以不唯一
  • 无序
  • 查找速度快

键、值、键值对

1、dic.keys() 返回一个包含字典所有KEY的列表;
2、dic.values() 返回一个包含字典所有value的列表;
3、dic.items() 返回一个包含所有(键,值)元组的列表;
4、dic.iteritems()、dic.iterkeys()、dic.itervalues() 与它们对应的非迭代方法一样,不同的是它们返回一个迭代子,而不是一个列表;

新增

1、dic[‘new_key’] = ‘new_value’;
2、dic.setdefault(key, None) ,如果字典中不存在Key键,由 dic[key] = default 为它赋值;_

删除

1、dic.pop(key[,default]) 和get方法相似。如果字典中存在key,删除并返回key对应的vuale;如果key不存在,且没有给出default的值,则引发keyerror异常;
2、dic.clear() 删除字典中的所有项或元素;
3、del dic[‘key’]

修改

1、dic[‘key’] = ‘new_value’,如果key在字典中存在,'new_value’将会替代原来的value值;
2、dic.update(dic2) 将字典dic2的键值对添加到字典dic中

查看(用get)

1、dic[‘key’],返回字典中key对应的值,若key不存在字典中,则报错;
2、dict.get(key, default = None) 返回字典中key对应的值,若key不存在字典中,则返回default的值(default默认为None)

循环

1、for k in dic.keys()
2、for k,v in dic.items()
3、for k in dic

长度

1、len(dic)

6.集合 set

特性:

1.确定性(元素必须可hash)
2.互异性(去重)
3.无序性(集合中的元素没有先后之分),如集合{3,4,5}和{3,5,4}算作同一个集合。
注意:集合存在的意义就在于去重和关系运算

增加

单个元素的增加 : add(),add的作用类似列表中的append
对序列的增加 : update(),而update类似extend方法,update方法可以支持同时传入多个参数

删除

集合删除单个元素有两种方法:
元素不在原集合中时:
set.discard(x)不会抛出异常
set.remove(x)会抛出KeyError错误

pop():由于集合是无序的,pop返回的结果不能确定,且当集合为空时调用pop会抛出KeyError错误,
clear():清空集合

关系运算

交集:
set1&set2

差集:
set1-set2
set2-set1

并集:
set1|set2

对称差集:
set1.symmetric_difference(set2)

子集
set1.issubset(set2)
set1<=set2

四、运算符

1.算术运算

+	加 - 两个对象相加	
-	减 - 得到负数或是一个数减去另一个数	
*	乘 - 两个数相乘或是返回一个被重复若干次的字符串	
/	除 - x 除以 y	
%	取模 - 返回除法的余数	
**	幂 - 返回x的y次幂	
//	取整除 - 向下取接近除数的整数

2.比较运算

==	等于	 - 比较对象是否相等	
!=	不等于 - 比较两个对象是否不相等	
>	大于 - 返回x是否大于y	
<	小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。	
>=	大于等于 - 返回x是否大于等于y。
<=	小于等于 - 返回x是否小于等于y。

3.逻辑运算 与或非

and:布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。	
or:布尔"或" - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值。	
not:布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。	

4.赋值运算 =

=	简单的赋值运算符	c = a + b 将 a + b 的运算结果赋值为 c
+=	加法赋值运算符	c += a 等效于 c = c + a
-=	减法赋值运算符	c -= a 等效于 c = c - a
*=	乘法赋值运算符	c *= a 等效于 c = c * a
/=	除法赋值运算符	c /= a 等效于 c = c / a
%=	取模赋值运算符	c %= a 等效于 c = c % a
**=	幂赋值运算符		c **= a 等效于 c = c ** a
//=	取整除赋值运算符	c //= a 等效于 c = c // a

5.成员运算 in

in:如果在指定的序列中找到值返回 True,否则返回 False。
not in:如果在指定的序列中没有找到值返回 True,否则返回 False。

6.身份运算 is

is:是判断两个标识符是不是引用自一个对象	
is not:是判断两个标识符是不是引用自不同对象	

7.位运算

&	按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0
|	按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。	
^	按位异或运算符:当两对应的二进位相异时,结果为1	
~	按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x 类似于 -x-1	
<<	左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。	
>>	右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数	

8.运算符优先级

**			指数 (最高优先级)
~ + -		按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)
* / % //	乘,除,取模和取整除
+ -			加法减法
>> <<		右移,左移运算符
&			位 'AND'
^ |			位运算符
<= < > >=	比较运算符
<> == !=	等于运算符
= %= /= //= -= += *= **=	赋值运算符
is is not	身份运算符
in not in	成员运算符
and or not	逻辑运算符

五、逻辑控制

1.if

PASS

2.while

条件循环
while 后面跟一个true或者false

3.for

遍历循环
for循环可以遍历任何序列的项目,如一个列表或者一个字符串

4.range函数

如果你需要遍历数字序列,可以使用内置range()函数。
跟切片类似,有起始值和结束值和步长

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值