Python学习之路----python基础(上)

  • A+
所属分类:安全开发

正如经典的Automate the Boring Stuff with Python一书中所提到的,Python让你能够自动化琐碎的东西,让你专注于更多令人兴奋和有用的东西。以下是一枚小菇凉在学习python中的一些学习总结~如有问题请大佬多多指教啦,笔芯芯♥~

0x00 Python学习

1)学习方法

程序员小哥哥说:语言的学习都是大同小异的,先掌握其语言特性----语言特点、内置函数、变量相关规则、运算符、流程控制、基本算法等。本篇对语言特性做简单介绍。

 

项目式学习

通过一些练习来具象化Python的语法和概念,能够学以致用

编程思维

学习语言最好的书籍就是他的官方文档

利用help 

在使用某些库的时候,可以通过IDLE通过dir,help来查询使用方法

2)Python的优缺点

优点

简单易学,上手快

有丰富的库,便于调用

可扩展、可嵌入(嵌入C语言来优化)

免费开源、可移植

解释性语言(不需要事先编译)

面向对象、高层

缺点

运行效率略低

多线程支持欠佳

商业支持不足

代码不能加密(既是缺点又是优点)

无类型

3)Python的注释

单行注释      #

多行注释      """ 注释内容 """

注释快捷键   ctrl+/  (部分其他语言也适用)

4)内置函数(后有介绍~)

Python学习之路----python基础(上)

 

0x01 Python变量

 1. 变量阐述

计算机的核心是CPU,程序运行在内存(内部存储器),变量在内存就像一个仓库,存储着各种各样数据的仓库,我们通过变量可以找到相应数据。
我们把变量比作一个盒子,里面存放着各种各样的数据(可存可改可读可写)。例如: a=10我们可以通过id(a)来查询a这个变量现在所在的位置。由于一个变量一次只能对应一个数值;而一个数值可以同时赋值给多个变量,所有我们以标签理论来解释变量赋值这个问题(变量就像给数值贴标签)。
Python一切皆对象,首先我们来看:

First:>>> list1=['a','b','c']>>> list2=list1>>> list2 ['a', 'b', 'c']>>> list1.append('d')>>> list2 ['a', 'b', 'c', 'd']>>> id(list1) 60660272>>> id(list2) 60660272
通过以上代码我们可以知道,变量 list1list2所对应的数值内随添加了 ‘d ’这个对象,但所对应的列表对象本身是没有改变的,所以我们列表['a','b','c']所对应的标签仍然是变量 list1 list2

Python学习之路----python基础(上)

Second:>>> num1=1>>> id(num1) 2064409776>>> num2=num1>>> id(num2) 2064409776>>> num1=2>>> num2 1>>> id(num1) 2064409792 ===》边界位256(最后一个固定id的数,257的id随机)

通过以上代码,我们可以发现,num1=1 && num2=num1 时,num1和num2都被贴到了 1 上,但在num1的值改变时,num2未改变num1和num2对应的id和值都不同了。见下图:

Python学习之路----python基础(上)

以上两个是不同的:

  ①First中的list1这个大的对象里面包含很多不同类型的对象,所以再追加进其他对象后,不影响整个数组对象,list1和list2的id是不变的,二者内容也是相同的

  ②Second中的对象是1,但后面修改了num1的值,也就修改了其对象,但num2的值仍然是1,不受num1影响,二者内容不同,且num1的id改变了


2. 命名规则(Python的关键字,不可作为命名)==》关键字=保留字

>>> import keyword>>> keyword.kwlist ['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']

命名规则:小写_下划线_小写(除了类用大写开头)

Python学习之路----python基础(上)



3. 运算符优先级:(运算符部分和其他语言类似)

Python学习之路----python基础(上)


0x02 Python流程控制

1. 顺序结构

        即程序按照其运行顺序和运算符优先级的顺序进行执行

2. 分支结构(选择结构)

        if ,有条件为真和条件为假两种运算方式。

3. 循环结构

        for while for循环可以遍历任何序列的函数;while是当满足条件就可以一直执行。

Python学习之路----python基础(上)


4.其他语句

· break : 用于结束整个循环(类似于这个循环崩坏,结束循环)

· continue :结束本次循环(会继续运行下一次,相当于跳过这次循环)

· pass : 相当于占位符,什么都不执行(在待修改的程序框架中,可先用pass占位符占位,以免程序出错)

· else : 一般和 if 一起使用,选取满足条件时锁执行的代码块


0x03 Python字符串

1. 字符串定义 : 

        字符串是一种文本数据类型  ==  单引号,双引号,三引号(在赋值时,三引号表示字符串)

Python学习之路----python基础(上)


2. 字符串运算符:

Python学习之路----python基础(上)

 

3. 字符串运算符的使用

>>> print("我好喜欢你%s"%'佳儿') ==》%s表示输出的是字符串我好喜欢你佳儿>>> print('你体重是%10.3f'%52.1314) ==》%10.3f 表示输出数值范围为小数点前十位后三位你体重是 52.131>>> print(r'Inlove you') ==》r'Inlove you' 中的 r 表示输出的是原始字符串Inlove you


4. 字符串的切片

切片:(正常切片不能获取到end位置的值)a[start:stop[:step]] ===> 左闭右开(闭包)>>> a['abcds']>>> a[::-1]'sdcba'>>> a[::1]'abcds'


5. 字符串内置函数

①find() 描述

  find() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果指定范围内如果包含指定索引值,返回的是索引值在字符串中的起始位置。如果不包含索引值,返回-1。

语法

find()方法语法:

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

参数

· str -- 指定检索的字符串

· beg -- 开始索引,默认为0

· end -- 结束索引,默认为字符串的长度。

返回值

如果包含子字符串返回开始的索引值,否则返回-1。
str.find(str,[beg[,end]]) ===> 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. 字符串运算符

Python学习之路----python基础(上)

 

0x04 Python四种基本类型

1. 数据类型:

  数据结构:相互之间存在一种或多种特定关系的数据或元素的结合。数据按照某种特定的结构存储。

· 列表:有序可变(增删改查) ===》 list[] 从0开始编号

       增加方法有:insert 任意位置插入;append 在尾部追加;extend 列表拼接(a.extend([5,6,8,9]))

        删除方法有:pop 将列表中的数据弹出并删除;remove 将列表中指定的数据删除,不显示出来

        修改方法有:index 通过索引来进行修改  

        查询方法有:in not in

        排序方法有:sort方法是列表的元素按照特定的顺序排列;reverse方法是将列表逆置


· 元组:有序不可变(查)   ===tuple()

Python学习之路----python基础(上)


·    合:无序唯一可变          ===set{}  交集,补集 ,下标从零开始


  在set中set.pop()内存储的是字符串的时候,随机弹出删除,存储的是元组或者列表,先排序在从左到右依次删除

(1, 2, 3, 4, 5, 6)>>> b.count(1)1>>> b.index(2)1


· 字典:无序可变 ===》 dict(key,value)    {‘ ’:‘ ’;‘ ’:‘ ’}

    键值对 ==》get一个不存在的,返回空;输出一个不存在的值,报错

        info['id'] 查id ===> 可用于修改值

     删除元素:pop(根据key值删除字典重点的元素);clear(清空字典中的数据,字典还在,元素没了)

     keys(输出所有key)/values(输出所有value)/items(输出所有键值对)

>>> c={'a','b','c','d','e'}>>> c.add('f')>>> c{'e', 'c', 'd', 'a', 'f', 'b'}>>> c.pop() 'e'{'d', 'a', 'love', 'f', 'b'}>>> c.discard(1)>>> c{'a', 'love', 'f', 'b'}>>> d={'1','2'}>>> c.union(d){'love', 'f', '1', '2', 'b', 'a'}>>> c.difference(d){'f', 'b', 'a', 'love'}


2. Python字典包含了以下内置函数:

Python学习之路----python基础(上)


0x05 Python函数

1. 函数:

        函数是组织好的、可重复使用的,用于解决代码重复性问题。(定义函数关键字是def

def print_info():函数体fn() #调用函数


 

2. 不定长参数

  有时可能需要一个函数能处理比声明时更多的参数,这些参数叫不定长参数,声明时不会命名

一个星号表示列表型的;两个星号表示键值对的

def functionname([formal_args,]*args,**kwargs):"函数——文档字符串"function_suitereturn[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 = 10def inner():nonlocal num # nonlocal关键字声明num = 100 print(num)inner()print(num)outer()

· 递归函数:函数自己调用自己

· 匿名函数:函数功能简短就可以使用匿名函数(可能只是用一次就不用了)   

          匿名函数就是没有名称的函数,也就是不再使用def语句定义的函数。如果要声明匿名函数,则需要使用lambda关键字 ===》

lambda[arg1[,arg2,...,argn]]:expressing

  奉上所有python的学习资料(视频和编程语言api文档的链接),后台回复“python学习包”,即可获得啦~~~

本文始发于微信公众号(凌晨安全):Python学习之路----python基础(上)

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: