python学习笔记

这篇博客详细介绍了Python的基础知识,包括数据类型、字符串、列表、元组、条件判断、流程控制、函数、对象方法、多线程中的锁机制,以及如何使用Python操作MySQL数据库和进行TCP/IP网络通信。还涵盖了TCP连接的三次握手和四次挥手过程,以及socket编程接口在Python中的应用。
摘要由CSDN通过智能技术生成

Python学习笔记

windows 的反斜杠\在路径里的会起到转义的作用,可以在前面加r表示不用转义

第3节:数据和表达式
整数:int
1、Python语言里一切数据都是对象
2、1、2、3
3、Python2:int-----long(长整数)
4、32bit -2(31)—2(31)-1
64bit -2(63)—2(63)-1

 5、Python3中:只有int没有long
 type()表示;显示输入的内容的类型

浮点数float(有长度限制,精度有限):
3.14
3.0
-3.0

加法:2+1 #+号前后空格没有限制,通常是一个空格

减法:5-4

乘法:5*56

查看环境变量命令:echo %path%

除法:
python 2
8/4 #结果是2 整数
9/4 #结果是2 余数与之无关
如果想得到浮点数,则可以将除数或者被除数改为浮点数:
8.0/4 #结果是2.0

Python3:
8/4 #结果是2.0 浮点数
9/4 #结果是2.25 浮点数
8.0/4 #结果是2.0 浮点数
如果想要得到整数,则用//
8//4 #结果是2 整数
9//4 #结果是2 整数

9%4 余数1 #Python2、3都是一样的。

幂运算:
2**2 #2的2次方 结果是4

混合运算:
2 ** 31 -1 #2的31次方减1

运算符优先级:
乘除比加减优先级高,如果需要改变运算优先级,可以使用括号,如有多个优先级,可以多次加括号

常用数据类型-字符串
print(‘hello world’) #可以使用双引号、三引号、双三引号,英文引号,实际的字符串对象是没有引号的,是我们为了定义它但是一个字符串加的,如果字符串本身就含有引号,可以用:
print(’ ‘‘hello world’’ ')

字符串和数字之间是不是能做运算的
字符串拼接,可用+号:
‘abc’ + ‘dfg’ #结果是’abddfg’

除了命令交互行,其余都是需要加print的

第4节:
pycharm
不只是一个代码编辑工具
它是一个IDE:集成开发环境
先了解代码编辑和执行的功能

python中所有的数据类型都是对象,是非常泛义的概念,包括函数,类,模块,方法都是对象

从代码表达直接可以产生Python对象的叫做字面量,比如:
3
3.5
‘sgshfksh’

   变量的命名:
   1、数据变量名是一种identifier(标识符、通俗的说就是name名字)
   2、一般以字母(小写、大写均可)开头
   3、后面可以使用下划线_或者数字
   4、大小写敏感
   5、不能与关键字相同(关键字是Python语言里面的特殊字符串、如import)
   6、不要与内置函数相同 #如果后面再引用到该内置函数,后面,该内置函数就是作为一个变量了
   7、不能用减号
   
  
  变量定义的过程,就是赋值的过程。#所有的数据类型都是对象
  name='jianglaoshi'
  解释器有变量的引用计数表
    a=233,a=344
    1、没有任何变量引用的对象,会被Python解释器清除
    2、被认为是无用的
    3、何时清除、一定的策略
    4、释放内存空间。

注意:1、Python中的任何变量赋值
1、都不会修改变量原来指向对象的值
2、而是将变量指向一个新的对象而已
3、如果原来的对象有其他变量指向它,也不会改变其他变量的指向。
a*=5 a=a*5
a/=2 a=a/2

常见的几种变量的赋值:
a +=1 #即a = a+1
a -=1 #即a = a-1

在datetime模块中有一个timedelta这个方法,它代表两个datetime之间的时间差
import datetime
otherStyleTime = (datetime.datetime.now()+datetime.timedelta(seconds=+5)).strftime("%Y%m%d_%H:%M:%S") #加五秒的时间

(datetime.datetime.now() + datetime.timedelta(days=-1)).strftime(’%Y-%m-%d %H:%M’) #减一天的时间

(datetime.datetime.now()+datetime.timedelta(minutes=+5)).strftime("%Y%m%d_%H:%M:%S") #加五分钟的时间
第5节课:
字符串的特性被称为sequence(序列),所有sequence类型都支持索引和切片
单引号’
双引号"
三引号’’’ ‘’’ #换行的时候只能使用三引号,内容较多时需要换行时使用
字符串里面是’时,外面使用"。反之相反。
字符串里面既有’和"时,外面使用’’’
字符串相乘:
‘abc’*4

空字符串和空格字符串有区别:
‘’ #空字符串
’ ’ #空格字符串

字符串不可以被改变

一个序列,若干个元素组成
sequence相同的操作。

位置索引(index)
标志每个元素的位置,用来获取元素
从左到右,从0开始
a[0],a[1],a[2]
可以用正数表示,也可以用负数表示,
最后一个元素也可以是a[-1]
长度为n的字符串,最后一个元素a[n-1]

a=‘name:jack’
a[4+1] 或a[5]

含义更清楚的表示:
namelen=4
splilen=1
a=[namelen+splilen]

切片:(slice)
a=‘name:jack’
a[5:9] 从start开始到end结束,但不包括end
a[5:5+namelen] 或a[5:5+4]
a[5:]
a[:4]或a[0:4]
a[1:2]=[1,2,3] #切片的内容直接赋值

负数切片:
始终是从前往后数,可以写成’abcd’[-3:-1],不可以写成[-1:-3]

用正数下标,还是负数下标
比如,日志文件
a=11:12:11> 001 enter chatroom,level 2
把ID抠出来
做法:
a=[10:10+3] #10+3 10代表要切的id的第一个位置,3表示它的长度
或者
11:12:11 > leve25 0025 enter chatroom
做法:
a=[-18:-18+4]

第6节课
列表:list
可以存储任何类型的数据,每个元素是任意类型,所有的数据类型都是存储在里面
[]空列表

[1,2233,‘122’,‘223’]4个元素 元素之间有空格或者换行没关系,只是为了好看

元素获取(index)与切片(slice)操作
a=[‘xi’,‘li’,‘liming’]
a=[0]
a=[‘lili’,‘kkek’,[‘lili’,‘minmingd’],‘lei’]
a=[2][0]

a.extend([1,2,3,4]) #列表中添加多个元素

a.insert(index, obj) #index – 对象 obj 需要插入的索引位置,obj – 要插入列表中的对象,会在列表指定位置插入对象

a.index(b) #查找元素的索引值
a.count(‘lili’) #查找元素出现的次数
复制列表:
a.copy() #复制列表 a

反序操作:
a.reverse()

排序操作:
a.sort() #把列表从小到大排序
a.sort(reverse=True) #把列表从大到小排序

改变list的内容:
修改:a[0]=‘apple’
增加:a.append(‘huahua’)
a.remover(‘xiaoxixao’) #括号里只能是具体的值,比如‘lili’
指定位置增加:a.insert(2,‘xiaobai’)
删除列表最后一个:a.pop()
删除列表中指定元素的索引 : a.pop(1)
删除列表中的所有元素 a.clear()
指定删除元素:a.pop(1) #括号里只能是下标数字
容器的概念:
像列表这种元素可以是任何其他类型对象的对象
我们通常会形象的吧它成为"容器"。因为它像一个容器一样用来盛放其他对象。
任何变量的重新赋值都不会改变原来的对象。而是创建了一个新的对象,然后将变量指向该创建的对象
#字符串对象不可改变
元组:
元组也是一种sequence类型
可以存储任何类型的数据,每个元素是任意类型
元组不能改变其中的元素,只能获取
如果只有一个元素,后面加,如a=d,
元组:
元组也可以直接这样写:a=1,2,3,4 也可以这样赋值:a,b = 1,2
元组也支持切片和索引

https://github.com/jcyrss/songqin-testdev/edit/master/python/task/prac03.md
第7节课:布尔表达式与条件判断
布尔类型(bool) id() #查看对象在内存上的地址
真假 对错 只有两种取值
true (真,对)
false(假,错)
数值的比较:
11
1
1
1==2
是否不相等:
1 !=2
大于
<= #不能有空格

=
字符串也可以进行比较—根据内部存储的大小进行比较
字符串大小的比较按ASCII码里对应的数字来比较
例如a对应的97,b对应的98,所以a<b

in 和not in 经常用在sequence类型中
新的布尔表达式in和not in
a=(123,12,1,3,1,3)
123 in a 意思是123在不在a这个元组里面
同样适用于字符串:
‘123’ in ‘122343233444’ 判断字符是不是其中的一部分,且一部分是 连续的

布尔表达式:
1、产生布尔值的表达式
2、== !=、> 都是比较操作符
2、因为表达式可被求值,所以它可写在赋值语句等号的右侧:
a=1
var = a>1
print (var)

条件组合:逻辑运算符
and 比or 优先级高,如果需要改变这种运算方式,可以加括号,多种情况时,可以加多个括号
not 比 or 优先级高,如果需要改变这种运算方式,可以加括号,多种情况时,可以加多个括号
and 且 :如果明年精神好且明天天气好,那么去爬山 true annd false
or 或 :小明在宿舍或小王在宿舍,那么你就回去拿钥匙 true or false
not 不:如果不 明天天气好,那么不去爬山。 not true

and :只当2个都为true,结果为true
or :只当其中的一个为true,结果为true
not:把操作反过来,not true 就是false。反之相反。

第8课:流程控制
1、程序流程控制的基本方式:
条件判断
循环
2、条件语句 if开头,条件是布尔表达式,也可以是布尔值
后面有个冒号
3、仅当条件成立时才运行下面缩进区块的语句。缩进4个空格
4、然后,继续后面的语句
5、否则跳过这个区块中的语句,然后继续运行区块后面的语句。
例如:
a=1
if a>0:
print(a)
else语句
else 表示非if 条件的情况下要做的事情,不可单独使用
代码段缩进规则和if语句相同
后面不缩进的部分,继续执行
if else一起的时候,只会执行里面的一种情况,要么if, 要么else
例如:
a=1
if a>0:
print(‘hello’)
else:
pirnt(‘mngming’)

elif 语句:
更多的分支,分别处理
a=50
if a>=80:
print
elif a>=70:
print
else:
print

判断条件是 复合表达式:
如果一个人的年龄大于等于60岁,并且为男性,我们称之为老先生
age=60
gender = ‘mail’
if age >=60 and gender == ‘mail’:
print(‘old gentleman’)

如果代码过长可以用\分行
例如:
age=60
gender = ‘mail’
if age >=60
and gender == ‘mail’:
print(‘old gentleman’)

条件判断里面还可以有条件语句

\n是换行,专门作为字符串中换行,只能出现在在字符串中
\是代表其实属于是一行,但是实际看起来有换行

https://github.com/jcyrss/songqin-testdev/edit/master/python/task/prac04.md

函数
1.给一段代码取一个名字就是定义一个函数
2.函数名(参数):缩进,缩进后的内容属于该函数下的内容
3.函数执行必须是函数名+括号,表示调用该函数
函数的作用
1.就是一段代码的组合, 一般实现一个具体的功能
2.函数名就是代表一段代码的变量
3.可以实现一个个的函数,最后组合起来
4.容易理解、容易维护,整体清晰,方便调用
5.调用函数,其实就是执行函数定义里面的代码块
6.函数的定义要在函数的调用前面

函数的调用和返回
调用函数,其实就是去执行函数定义里面的代码块
函数的定义要在函数的调用前面

函数的调用参数与返回值
函数的参数
1.定义参数(形参)时的命名规则和变量一样
2.可以是一个,也可以是多个,逗号隔开
3.函数体里面像变量一样的使用参数
4.调用函数时,传入对应个数的参数(实参)
例如:def define(a,b)
调用:define(3,4)
define(a = 3,b = 4)
define(b = 4,a = 3)
define(3,b = 4)
define(a = 3, 4)错误用法

def fool(x): #x是形参
print(x+3)

fool(3) # 3是实参

另一种参数传入的方式:
关键字参数调用:
def fool(a,b):
print(a*b)

fool(a=2,b=3) 或fool(2,3)或fool(b=3,a=2)

函数的返回值
return 关键字
返回对象可以赋值给变量,也可以直接使用
def fool(x):
return x+3
print(fool(6))
可以是一个,也可以是多个
def foo2(a,b)
return a3,b4
a,b=foo2(3,4)
a,b=(1,2)
参数变量有效范围是在函数内部,优先级高于外部的变量
可以返回任意类型的对象
def foo():
return xxxx #xxxx 可以是任意类型、比如()[]{}

Python的内置(built-in)函数
Python中内置了许多函数,我们直接调用即可
print、len、max、min、
数据类型转换:
int(‘33’)

第10节:对象的方法
Python中的一切类型的数据都是对象
对象:数据+方法
对象数据:
1、对象所对应的存储的东西,是静态的部分
2、比如a=‘s2222’
对象方法:
1、可以看做对象的行为,是动态的部分
2、对象方法其实就是属于该对象的函数。
3、例如a.append(‘feefe’)

常用的方法:
查找字符串的位置:
a.find(‘e’) 注:查找’e’的位置
‘ok,good’.find(’,’,3) 注:从第三个位置开始找

count 计算字符串中包含的多少个指定的字符串 # 比如查找班上有几个叫小明
’123 123 789’.count(‘123’) #返回结果为2

endswith 检查字符串是否已指定的字符串结尾(返回的是布尔值)
’123 33789’ .endswith(‘89’)

startswitch 检查字符串是否已指定的字符串开头(返回的是布尔值)
‘185 123 789’.startswitch(‘123’)

isalpha 检查字符串中是否都是字母
‘fsfs1’.isalpha()
false

isdigit 检查字符串是否都是数字
‘12233’.isdigit()
true

str.join将元素(sequence)类型的参数的元素字符串合并(连接)到一个字符串,将
string作为分隔符 #元组和列表都可以

‘;’.join([‘i’,‘kie’,‘play’,‘football’])

split() 与join意思相反,就是切割的意思,返回的是list(列表)
‘122 334 444343’.split(’’) #括号里不填入任何内容,默认为空

splitlines(keepends) 返回一个包含各行作为元素的列表 参数keepends – 在输出结果里是否保留换行符(’\r’, ‘\r\n’, \n’),默认为 False,不包含换行符,如果为 True,则保留换行符。
str1 = ‘ab c\n\nde fg\rkl\r\n’
print str1.splitlines();
[‘ab c’, ‘’, ‘de fg’, ‘kl’]

str2 = ‘ab c\n\nde fg\rkl\r\n’
print str2.splitlines(True)
[‘ab c\n’, ‘\n’, ‘de fg\r’, ‘kl\r\n’]

lower() 将字符串里面如果有大写字母的全部转为小写字母

‘china’.islower() #是否全部为小写字母
‘china’.isupper() #是否全部为大写字母

upper 将字符串里面如果有小写字母的全部转为大写字母
‘china’.upper()
‘CHINA’

replace 替换字符串里面指定的字符串
‘Tom is dog. sonnpy is a dog ‘.replace(‘dog’,‘pig’) 全部替换
Tom is a pig.snoopy is a pig’
去掉所有的空格:’ good ‘.replace(’ ‘,’’)

strip 将字符串前置空格和后置空格删除
’ good '.strip()

lstrip将字符串前置空格删除
rstrip将字符串后置空格删除

\n :换行
\t :制表符
\b :退格符
\r :回车符,当前位置移到本行开头
\ :转义
\a :系统提示音
’ :对符号进行转义
\0 :代表一个空字符
r :对路径转义

元祖的方法只有index和count

list对象的常用方法:
空list有什么用。

a.append() #给列表添加一个元素,是向列表的尾部添加元素,只能添加一个元素
a.insert(0,3) #有两个参数,前面的0是指定的索引位置,后面的3是要插入的元素,插入元素后,原先处于该位置的元素往后移动
a.extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
extend()方法语法:
list.extend(seq) #是一个序列
aList = [123, ‘xyz’, ‘zara’, ‘abc’, 123];
bList = [2009, ‘manni’];
aList.extend(bList)
[123, ‘xyz’, ‘zara’, ‘abc’, 123, 2009, ‘manni’]

从列表中删除一个元素:
del a[1] 参数是索引值


a.pop() a.pop(1) 参数是索引值,有返回值,返回的就是删除的值


a=[1,2,4,3,4,5]
a.remove(4) 注意:参数是删除的元素名字
print a
[3,1,2,4]
注意:根据值删除,但是这种方法要注意的是,如果列表里有多个元素都是这个值,那么一次只能删除第一个元素

以上三种删除方式,哪种性能最高,如果知道某个元素的位置最好用del或者pop,remove是从第一个开始找该元素,所以性能稍低

reverse,将列表里面元素倒序排列
a=[1,2,3,4,5]
a.reverse()
print a
[5,4,3,2,1]

删除一整个列表,可以赢a.clear() 或者del[:]
所有的方法都是圆括号
学会查看文档
谷歌、bing
https://github.com/jcyrss/songqin-testdev/blob/master/python/task/prac05.md
https://github.com/jcyrss/songqin-testdev/blob/master/python/task/task01.md

第11课:字符串格式化
字符串的格式化
name=‘lili’
height=170
print(‘我叫%s,身高%scm’ % (name,height)) #%后面可以是一个变量也可以是字符串,多个变量用()
提高可读性

字符串的格式化
format % values
format 是等待格式化的字符串
由包含%号的占位符的字符串组成的

values
values 可以是普通的数值对象、字符串对象
tuple,表示多个对象填充format里面的占位符%

%s :用str()函数进行字符串转换
%d :转成有符号的十进制数
%f :转成浮点数
%x :转成无符号十六进制数

指定宽度:(%)
‘%d’ % 56
‘%10d’ % 56 # 最小宽度,不足空格补齐 #右对齐
‘%-10d’ % 56 #左对齐
‘%010d’ % 56 #补零

十六进制:
“%x" % 108
“%X” %108 #大写
“%#X” % 108
“%#x” % 108 结果:‘0x6c’ 表示十六进制

小数:
‘%f’ % 1234.56789
‘%09.2f’ % 1234.56897 前面补零

字符串的format 方法:
使用format()内置函数格式化每个参数
‘my name is {}’.format(‘lili’)
可以指定位置填充:
‘{1}-{0}|{0}-{1}’.format(‘lili’,16)#要么都填充数字,要么都不填
参数名方法:
‘my name is {name}’.format(name=‘lili’)

指定宽度:(format)
‘{}’.format(56)
‘{:10}’.format(56)
‘{:<10}’.format(56) #左对齐
‘{:>10}’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值