正如经典的Automate the Boring Stuff with Python一书中所提到的,Python让你能够自动化琐碎的东西,让你专注于更多令人兴奋和有用的东西。以下是一枚小菇凉在学习python中的一些学习总结~如有问题请大佬多多指教啦,笔芯芯♥~
0x00 Python学习
1)学习方法
程序员小哥哥说:语言的学习都是大同小异的,先掌握其语言特性----语言特点、内置函数、变量相关规则、运算符、流程控制、基本算法等。本篇对语言特性做简单介绍。
项目式学习 |
|
编程思维 |
学习语言最好的书籍就是他的官方文档 |
利用help |
在使用某些库的时候,可以通过IDLE通过dir,help来查询使用方法 |
2)Python的优缺点
优点
简单易学,上手快
有丰富的库,便于调用
可扩展、可嵌入(嵌入C语言来优化)
免费开源、可移植
解释性语言(不需要事先编译)
面向对象、高层
缺点
运行效率略低
多线程支持欠佳
商业支持不足
代码不能加密(既是缺点又是优点)
无类型
3)Python的注释
单行注释 #
多行注释 """ 注释内容 """
注释快捷键 ctrl+/ (部分其他语言也适用)
4)内置函数(后有介绍~)
0x01 Python变量
1. 变量阐述
First:
'a','b','c'] > list1=[
> list2=list1
'a', 'b', 'c'] > list2 [
'd') > list1.append(
'a', 'b', 'c', 'd'] > list2 [
60660272 > id(list1)
60660272 > id(list2)
Second:
1 > num1=
2064409776 > id(num1)
> num2=num1
2064409776 > id(num2)
2 > num1=
1 > num2
2064409792 ===》边界位256(最后一个固定id的数,257的id随机) > id(num1)
通过以上代码,我们可以发现,num1=1 && num2=num1 时,num1和num2都被贴到了 1 上,但在num1的值改变时,num2未改变num1和num2对应的id和值都不同了。见下图:
以上两个是不同的:
①First中的list1这个大的对象里面包含很多不同类型的对象,所以再追加进其他对象后,不影响整个数组对象,list1和list2的id是不变的,二者内容也是相同的
②Second中的对象是1,但后面修改了num1的值,也就修改了其对象,但num2的值仍然是1,不受num1影响,二者内容不同,且num1的id改变了
2. 命名规则(Python的关键字,不可作为命名)==》关键字=保留字
> import keyword
'False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield'] > keyword.kwlist [
命名规则:小写_下划线_小写(除了类用大写开头)
3. 运算符优先级:(运算符部分和其他语言类似)
0x02 Python流程控制
1. 顺序结构
即程序按照其运行顺序和运算符优先级的顺序进行执行
2. 分支结构(选择结构)
即 if ,有条件为真和条件为假两种运算方式。
3. 循环结构
即 for 和 while 。for循环可以遍历任何序列的函数;while是当满足条件就可以一直执行。
4.其他语句
· break : 用于结束整个循环(类似于这个循环崩坏,结束循环)
· continue :结束本次循环(会继续运行下一次,相当于跳过这次循环)
· pass : 相当于占位符,什么都不执行(在待修改的程序框架中,可先用pass占位符占位,以免程序出错)
· else : 一般和 if 一起使用,选取满足条件时锁执行的代码块
0x03 Python字符串
1. 字符串定义 :
字符串是一种文本数据类型 ==》 单引号,双引号,三引号(在赋值时,三引号表示字符串)
2. 字符串运算符:
3. 字符串运算符的使用
"我好喜欢你%s"%'佳儿') ==》%s表示输出的是字符串 print(
我好喜欢你佳儿
'你体重是%10.3f'%52.1314) ==》%10.3f 表示输出数值范围为小数点前十位后三位 print(
你体重是 52.131
r'Inlove you') ==》r'Inlove you' 中的 r 表示输出的是原始字符串 print(
Inlove you
4. 字符串的切片
切片:(正常切片不能获取到end位置的值)
a[start:stop[:step]] ===> 左闭右开(闭包)
'abcds'] > a[
::-1] > a[
'sdcba'
::1] > a[
'abcds'
5. 字符串内置函数
①find() 描述
find() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果指定范围内如果包含指定索引值,返回的是索引值在字符串中的起始位置。如果不包含索引值,返回-1。
语法
find()方法语法:
str.find(str, beg=0, end=len(string))
参数
· str -- 指定检索的字符串
· beg -- 开始索引,默认为0。
· end -- 结束索引,默认为字符串的长度。
返回值
str.find('loveyou') ===> 'loveyou'.find('l') ===>0
'abcdefg'.find('a',2,5) -1 >
'abcdefg'.find('c',2,5) 2 >
重载:使用不同参数得到不同结果
'abcdefcccg'.find('c',2,5) >
2
②count() 描述
count() 方法用于统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置。
语法
count()方法语法:
str.count(sub, start= 0,end=len(string))
参数
· sub -- 搜索的子字符串
· start -- 字符串开始搜索的位置。默认为第一个字符,第一个字符索引值为0。
· end -- 字符串中结束搜索的位置。字符中第一个字符的索引为 0。默认为字符串的最后一个位置。
返回值
该方法返回子字符串在字符串中出现的次数。
str.count(str,[beg[,end]])
'abcdesssscccfg'.count('c',2,15) >
4
③replace()描述
replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。
语法
replace()方法语法:
str.replace(old, new[, max])
参数
· old -- 将被替换的子字符串。
· new -- 新字符串,用于替换old子字符串。
· max -- 可选字符串, 替换不超过 max 次
返回值
返回字符串中的 old(旧字符串) 替换成 new(新字符串)后生成的新字符串,如果指定第三个参数max,则替换不超过 max 次。
str.replace(str,str[,max])
'abcdesssscccfg'.replace('ccc','g') >
'abcdessssgfg'
④split()描述
split() 通过指定分隔符对字符串进行切片,若第二个参数 num 有指定值,则分割为 num+1 个子字符串。
语法
split() 方法语法:
str.split(str="", num=string.count(str))
参数
· str -- 分隔符,默认为所有的空字符,包括空格、换行(n)、制表符(t)等。
· num -- 分割次数。默认为 -1, 即分隔所有。
返回值
返回分割后的字符串列表。
str.aplit(str="",num=string.count(str)) ==> 字符串切片变成列表
'abcdesssscccfg'.split('c',5) >
['ab', 'dessss', '', '', 'fg']
⑤strip() 描述
strip() 方法用于移除字符串头尾指定的字符(默认为空格)或字符序列。
注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
语法
strip()方法语法:
str.strip([chars]);
参数
· chars -- 移除字符串头尾指定的字符序列。
返回值
返回移除字符串头尾指定的字符序列生成的新字符串。
str.strip([chars]) ==> 清除左右的字符
str.lstrip([chars])
str.rstrip([chars])
' abcdes ssscccf g '.strip() >
'abcdes ssscccf g'
6. 字符串运算符
0x04 Python四种基本类型
1. 数据类型:
数据结构:相互之间存在一种或多种特定关系的数据或元素的结合。数据按照某种特定的结构存储。
· 列表:有序可变(增删改查) ===》 list[] 从0开始编号
增加方法有:insert 任意位置插入;append 在尾部追加;extend 列表拼接(a.extend([5,6,8,9]))
删除方法有:pop 将列表中的数据弹出并删除;remove 将列表中指定的数据删除,不显示出来
修改方法有:index 通过索引来进行修改
查询方法有:in 和 not in
排序方法有:sort方法是列表的元素按照特定的顺序排列;reverse方法是将列表逆置
· 元组:有序不可变(查) ===》 tuple()
· 集 合:无序唯一可变 ===》set{} 交集,补集 ,下标从零开始
在set中set.pop()内存储的是字符串的时候,随机弹出删除,存储的是元组或者列表,先排序在从左到右依次删除
(1, 2, 3, 4, 5, 6)
1) > b.count(
1
2) > b.index(
1
· 字典:无序可变 ===》 dict(key,value) {‘ ’:‘ ’;‘ ’:‘ ’}
键值对 ==》get一个不存在的,返回空;输出一个不存在的值,报错
info['id'] 查id ===> 可用于修改值
删除元素:pop(根据key值删除字典重点的元素);clear(清空字典中的数据,字典还在,元素没了)
keys(输出所有key)/values(输出所有value)/items(输出所有键值对)
'a','b','c','d','e'} > c={
'f') > c.add(
> c
{'e', 'c', 'd', 'a', 'f', 'b'}
'e' > c.pop()
{'d', 'a', 'love', 'f', 'b'}
1) > c.discard(
> c
{'a', 'love', 'f', 'b'}
'1','2'} > d={
> c.union(d)
{'love', 'f', '1', '2', 'b', 'a'}
> c.difference(d)
{'f', 'b', 'a', 'love'}
2. Python字典包含了以下内置函数:
0x05 Python函数
1. 函数:
函数是组织好的、可重复使用的,用于解决代码重复性问题。(定义函数关键字是def)
def print_info():
函数体
fn() #调用函数
2. 不定长参数
有时可能需要一个函数能处理比声明时更多的参数,这些参数叫不定长参数,声明时不会命名
一个星号表示列表型的;两个星号表示键值对的
def functionname([formal_args,]*args,**kwargs):
"函数——文档字符串"
function_suite
return[expression] #函数的返回值:return
def test(a, b, *args):
print(a)
print(b)
print(args)
test(1,2,4,5,6)
3. 根据函数的参数和返回值,函数可以分为四种类型:
①无参数,无返回值的函数
②无参数,有返回值的函数
③有参数,无返回值的函数
④有参数,有返回值的函数
4.变量的作用域:
· 为避免变量名称发送冲突,所有python引入了命名空间的概念。
· 命名空间指的是名称到对象的映射,类似于字典,键名是变量的名称,值是变量的值
· 内部要改变全局变量,要global声明
· 闭包:函数内部包含一个函数,函数用函数的数据==》闭包函数--nonlocal(用外面的数据)
#nonlocal闭包函数
def outer():
num = 10
def inner():
nonlocal num # nonlocal关键字声明
num = 100 print(num)
inner()
print(num)
outer()
· 递归函数:函数自己调用自己
· 匿名函数:函数功能简短就可以使用匿名函数(可能只是用一次就不用了)
匿名函数就是没有名称的函数,也就是不再使用def语句定义的函数。如果要声明匿名函数,则需要使用lambda关键字 ===》
lambda[arg1[,arg2,...,argn]]:expressing
奉上所有python的学习资料(视频和编程语言api文档的链接),后台回复“python学习包”,即可获得啦~~~
本文始发于微信公众号(凌晨安全):Python学习之路----python基础(上)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论