Python自学day-2

一、模块

 模块分两种:标准库和第三方库,标准库是不需要安装就可以使用的库。

 import [模块名]:导入一个库,优先是在项目路径中寻找。自定义模块名不要和标准库模块名相同。

sys模块:

import sysprint(sys.path)

sys.path保存的是Python内部调用或模块的查找路径。结果如下:

[‘D:\\pycharm_workspace\\FirstProject\\day2‘,

‘D:\\pycharm_workspace\\FirstProject‘,

‘D:\\Python36\\python36.zip‘,

‘D:\\Python36\\DLLs‘,

‘D:\\Python36\\lib‘,

‘D:\\Python36‘,

‘D:\\Python36\\lib\\site-packages‘]

 ‘D:\\Python36\\lib\\site-packages‘中主要存放安装的第三方库。‘D:\\Python36\\lib‘主要放标准库。

import sysprint(sys.argv)

sys.argv保存参数,第一个参数为该模块文件的相对路径,后面的参数加在一起形成一个列表。

os模块:

import osos.system("dir")  #只执行命令,不保存结果

os.system()执行一条系统命令。直接输出到屏幕,不能存到变量里,该方法返回状态码(0为成功)。

import oscmd_res = os.popen("dir").read()print(cmd_res)    

os.popen("dir")执行dir命令,并将结果存放到内存的某个区域,需要使用read()读取结果。

import osos.mkdir("new_dir")

os.mkdir("new_dir"),在当前路径创建一个新目录。当目录已经存在时,会抛出异常。

第三方模块:

即自定义的py文件(test.py)。在另外一个py文件中导入(import)该模块。使用import test。若IDE提示该模块No Module named test。则在项目目录或包含该文件的目录上点击右键,选择Mark Directory As->Source Root。

二、pyc

    执行一个模块后,会在代码文件目录中出现一个__pycache__文件夹,该文件夹里存在与模块名对应的pyc文件。例如module1.cpython-36.pyc。

随着JAVA等基于虚拟机的语言兴起,不能把语言纯粹地分成解释性和编译型这两种。

JAVA首先是通过编译器编译成字节码文件,然后在运行时通过解释器给解释成机器码。所以我们说JAVA是一种先编译后解释的语言。

Python到底是什么:

Pyhton和Java/C#一样,也是一门基于虚拟机的语言。也是一门先编译后解释的语言。

三、Python执行过程

    PyCodeObject:就是Pyhton编译器编译成的结果。当Python程序运行时,编译结果保存在内存中的PyCodeObject中,运行结束后回写到pyc文件中。当程序第二次执行时,首先会在硬盘中寻找pyc文件,找到就直接载入,否则就重复编译过程。如果pyc更新时间比源代码时间老,则需要重新编译。

四、数据类型初识

 int:在C语言中,32位机器只能存-2**31~2**31-1,即-2147483648~2147483647。64位机器存-2**63~2**63-1。在Python中没有限制整型数值的大小,实际上机器内存有限,整型数值也不会是无限的。例如print(type(2**100)),输出是int。

float:小数,例如3.23。科学计数,5.2E-4,相当于5.2*10**-4。

布尔值:真或假(Ture/False),1或0(只有1和0代表真假)。

五、三元运算

result = 值1 if 条件 else 值2。即当if条件成立时,result为值1,否则为值2.

eg.

a,b,c = 1,3,5result = a if a>b else cprint(result)

六、bytes和str

在Python3中,对文本和二进制数据做了更为清晰的区分。文本总是Unicode,有str表示,二进制数据则有Bytes类型表示。

str和bytes之间可以互相转换。如下图所示:

eg.

msg = "我爱北京天安门".encode("utf-8")print(msg)msg = msg.decode("utf-8")print(msg)

将"我爱北京天安门"使用encode()编码成二进制,参数指定待转换的文本编码为utf-8,默认为utf-8。然后decode()解码成文本。

七、列表

定义一个列表:names = [],names = ["Leo","Alex","Jack","Leno"]

取一个值:names[index],例如names[1],取出Alex。

切片:

取一个范围的值:names[1:3],取出["Alex","Jack"],左边的1包含,右边的3不包含。names[0:3]和names[:3]是一样的。

取最后的值:names[-1],取出Leno。

取最后一段的值:names[-2:],取出["Jack","Leno"]。

跳着切片:names[0:-1:2],从第一个取到倒数第二个,没取一个跳过一个。

追加(append):names.append("成龙")。

 插入(insert):names.insert(1,"成龙"),把成龙放到了index为1的位置,后面的名字依次后移。

替换:names[1] = "杨幂",直接写入某个位置,把成龙替换为杨幂。

删除(remove):三种方法:names.remove("杨幂")。del names[1]。names.pop(1)。pop()若不填写下标,则默认删除最后一个。

查找下标(index):names.index("杨幂"),返回第一个杨幂的下标。

    清除(clear):names.clear()

    翻转(reverse):names.reverse()

    排序(sort):names.sort()。默认是特殊字符>数字>大写>小写,按ASCII码来排序的。

合并(extend):names.extend(names2)。将names2列表加到names后面。合并后name2仍然存在。

复制(copy):names2 = names.copy()。只拷贝第一层数据,为浅COPY。第二层是存的引用,所以拷贝的是指针。注意注意!!!

        eg.

names = [1,2,3,[‘a‘,‘b‘],4,5]names2 = names.copy()names2[2] = 10names2[3][1] = ‘c‘print(names)print(names2)

        第一层的数据完全copy。第二层的数据未copy,copy的是内存地址。共同指向同一块内存区域。

若要使用真正的copy则需要导入copy模块:

import copynames = [1,2,3,[‘a‘,‘b‘],4,5]names2 = copy.copy(names)  #和list中的copy是一摸一样的names3 = copy.deepcopy(names)   #深度copy,真正意义上的copy。但用得少,占两份完整的内存空间。

列表循环:

num = [0,1,2,3,4,5,6,7,8,9,10]for i in num[0:-1:2]:print(i)

八、元组

即不可变的列表,可称为只读列表。使用( )表示。

names = ("192.168.1.100","admin","passwd")

例如,使用元组来保存不可变数据,例如数据库连接信息。

九、判断值是否为数值

num = input("please input a num")if num.isdigit():num = int(num)

十、字符串操作

 

    字符串的值是不能更改的,所有在字符串上做的改变操作,内部都是重新产生了一个字符串来覆盖原本的字符串。

name = "leo zheng leokale"

首字母大写(capitalize):name.capitalize(),输出"Leo zheng leokale"

统计字母或字符串出现次数(count):name.count(‘e‘),输出2。name.count(‘leo‘),输出2。

填充并居中(center):name.center(50,"*"),若name中的字符串不够50个字符,则使用‘*‘填充够50个。并且将name的字符串居中。

****************leo zheng leokale*****************

判断是否已指定字符结尾(endswith):name.endswith(‘le‘),输出True。

将tab转换为指定个数的空格(expandtabs):name = "leo \tzheng"   name.expandtabs(tabsize = 30),将\t转换为30个空格。

查找指定字符或字符串的索引(find):name.find(‘o‘),输出2。默认只找出第一个。或者name.find(‘ka‘),返回13。

格式化(format)(常用):name = "my name is {myname}"   print(name.format(myname = "Leokale")),输出"my name is Leokale"。

name = "my name is {name},I am {year} years old."print(name.format(name = "Leokale",year = 32))

格式化(format_map):

name = "my name is {name},I am {year} years old."print(name.format_map({"name":"leokale","year":32}))

    判断是否是阿拉伯数字和字符(isalnum):

print("123".isalnum())   #输出True
print("123abc".isalnum())    #输出True
print("123abc*".isalnum())    #输出False

    判断是否为纯英文字符(isalpha):包含大小写

print("abcABC".isalpha())   #返回True
print("abcABC123".isalpha())   #返回False

判断是否为十进制(isdecimal)

判断是否为整数(isdigit)

 判断是否为一个合法的标识符(isidentifier):即是否是一个合法的变量名。

print("my_name".isidentifier())   #输出True
print("--my_name".isidentifier())   #输出false

判断是否全为小写(islower)

    判断是否权威大写(isupper)

    判断是否是纯数字(isnumeric):几乎同isdigit。即判断是否为整数。

判断是否为Title(istitle):即每个单词首字母大写,其他都小写。

判断是否可打印(isprintable):tty file,drive file无法打印。

 将一个队列变成字符串(join):

print("+".join(["my","name",‘is‘,‘leokale‘]))   #输出my+name+is+leokale

    在后面使用字符填充(ljust):

print("name".ljust(20,‘*‘))  #输出name****************

在前面使用字符填充(rjust):

print("name".rjust(20,‘*‘))

 全部转换为小写(lower)

    全部转换为大写(upper)

    去掉前后的空格和换行符(strip):

name = "  name  \n"print(name.strip())

  去掉左边的空格和换行符(lstrip)

    去掉右边的空格和换行符(rstrip)

    

    密码翻译(maketrans):

name = "leokale good day is today"ppp = str.maketrans("leokalgdys","123456789*")   #数量要对应print(name.translate(ppp))

 替换(replace):

print("namea".replace("a","*",2))   #输出 n*me*

从右边开始查找返回索引(rfind):

print("leokale".rfind(‘l‘))  #输出5

按某个字符分割(split):

print("my name is leo".split())   #输出[‘my‘, ‘name‘, ‘is‘, ‘leo‘]print("my+name+is+leo".split(‘+‘))

按换行分割(splitlines):在不同系统中按换行符分割(windows和linux不同)。

互换大小写(swapcase):

print("Name".swapcase())   #输出 nAME

 转换为Title(title):

print("good thing".title())   #输出 Good Thing

用0在前面补位(zfill):主要用于16进制前面使用0补位。

十一、字典

字典是一种key-value数据类型。语法:

info = {‘id1‘:‘Leo‘,‘id2‘:‘Jack‘,‘id3‘:‘Alex‘,‘id4‘:‘Song‘}
  • dict是无序的,没有下标索引。打印出来,顺序是乱的。
  • key必须是唯一的,天生去重。

    

    打印结果:print(info)

{‘id1‘: ‘Leo‘, ‘id2‘: ‘Jack‘, ‘id3‘: ‘Alex‘, ‘id4‘: ‘Song‘}

 取值:

print(info[‘id1‘])   #输出 leo

    修改:

info[‘id1‘] = ‘Kale‘print(info[‘id1‘])   #输出 Kale

 添加一条:id5不存在时,则为添加。

info[‘id5‘] = ‘Lily‘

 删除:

del info[‘id2‘]print(info)
info.pop(‘id2‘)print(info)
info.popitem()   #随机删除一个print(info)

查找:

if ‘id1‘ in info:   #‘id1‘ in info,若存在返回True,不存在返回False。列表和元组也可以这样判断。print("id1存在")

    字典嵌套:

info = {‘id1‘:{‘name‘:‘Leo‘,‘age‘:32},‘id2‘:{‘name‘:‘Boob‘,‘age‘:12},‘id3‘:{‘name‘:‘Alex‘,‘age‘:22},‘id4‘:{‘name‘:‘Jack‘,‘age‘:56}}

    修改id2中的年龄:

info[‘id2‘][‘age‘] = 44print(info)

    取值,若不存在则创建该值,若存在则取出该值(setdefault):

info.setdefault(‘id5‘,{‘name‘:"武藤兰"})print(info)         #添加了id5,name为武藤兰info.setdefault(‘id5‘,{‘name‘:"藤原爱"})print(info)         #已经存在id5,则返回{‘name‘:‘武藤兰‘}

更新(update):若info与info2之间的key有交叉,则使用info2中的内容替代。没交叉的部分,在info里创建。

info2 = {‘id1‘:{1:2,2:3}}info.update(info2)

把字典转换为列表,每一个key-value转换为元组:

print(info.items())  #输出dict_items([(‘id1‘, {1: 2, 2: 3}), (‘id2‘, {‘name‘: ‘Boob‘, ‘age‘: 12}), (‘id3‘, {‘name‘: ‘Alex‘, ‘age‘: 22}), (‘id4‘, {‘name‘: ‘Jack‘, ‘age‘: 56})])
info_list = list(info.items())

初始化一个字典(fromkeys):

dict1 = dict.fromkeys([1,2,3,4],"test")print(dict1)

在这里,若fromkeys的第二个参数为二层以上结构。则dict1每个key对应的value为一个引用。修改其中一个,全部都会变化。

dict1 = dict.fromkeys([1,2,3,4],{‘name‘:‘leo‘})dict1[1][‘name‘] = "Jack"print(dict1)   #输出 {1: {‘name‘: ‘Jack‘}, 2: {‘name‘: ‘Jack‘}, 3: {‘name‘: ‘Jack‘}, 4: {‘name‘: ‘Jack‘}}

    循环读取:

for key in info:   #建议使用这种,高效。print(key,info[key])
for k,v in info.items():   #有一个把字典转换为列表的过程,效率比较低,数据量大的时候体现明显。print(k,v)
时间: 2024-10-27 11:04:53

Python自学day-2的相关文章

python自学笔记

python自学笔记 python自学笔记 1.输出 2.输入 3.零碎 4.数据结构 4.1 list 类比于java中的数组 4.2 tuple 元祖 5.条件判断和循环 5.1 条件判断 5.2 循环 6.使用dict和set 6.1 dict 6.2 set 7.函数的使用 7.1函数返回多个值,同时接受多个值 7.2函数参数的默认值 7.3可变参数的函数 7.4可变个数带参数名的入参 7.5参数类型组合 8.关于函数递归 9.python的高级特性 9.1切片 9.2遍历 9.3列表生

Python - 自学django,上线一套资产管理系统

一.概述 终于把公司的资产管理网站写完,并通过测试,然后上线.期间包括看视频学习.自己写前后端代码,用时两个多月.现将一些体会记录下来,希望能帮到想学django做web开发的人.大牛可以不用看了,小白的第一个项目,写的很low,不入眼. 二.过程 1. python自学断断续续都有好长的时间,总是零零散散,没有去完完全全开发一个项目出来,跟别人说我会python,都没有啥说服力.后来下定决心,用python去做一个网站出来.正好公司平常维护资产的时候使用的是excel表,十分不科学.领导有意思

[Python自学] 项目发布流程

一.上线准备工作 1.准备Python虚拟环境:[Linux系统] CentOS7创建Python虚拟环境 2.安装Python依赖:[Python自学] 批量安装依赖 3.部署MariaDB:[数据库] MariaDB安装及使用 4.部署Redis集群:[NoSQL数据库] Redis集群部署 5.使用uWSGI运行项目:[Python自学] uWSGI启动django项目 5.部署Nginx:[Linux系统] (8)Nginx 6.使用LVS(可选):[Linux系统] (6)LVS负载均

Python 自学不求人

自学 Python 不求人,本文介绍 Python 自学时如何获取免费权威的帮助信息. 概述 如何使用 Python 自带的 help() 方法 如何利用 Python 文档 获取中文文档 获取帮助 help 每次进入 python 解释器的交互模式时,都会先打印横幅消息,在版本信息下面就是推荐 的命令: Type "help", "copyright", "credits" or "license" for more inf

Python 自学感想

将近三十岁的我回想了一下以前的种种......感到一种莫名伤感与无奈.伤感是因为:将近三十的我还是一事无成,身无分文,浪费太多的时间在一些无用的东西上面(比如:游戏).无奈是因为:只能眼睁睁的看着时间随风飘逝,而没有任何办法留住它,任它腐蚀着我的身心. 向前面的路望了望,只看到了无尽的深渊与绝望.我看不到以后的路,找寻不到一点希望.还是玩游戏吧,至少玩的时候心里不会想到这些烦心事,但是玩过之后,又是一阵无尽的空虚与伤感.于是删了游戏,(删了装,装了又删,自已都不记得重复了多少次了)强硬着逼自己再

Python 自学笔记(一)环境搭建

一,关于Python的介绍 关于Python的介绍,我不想多说了,网上随便一搜,很多介绍,这里我主要写下我的自学Python的 过程,也是为了促进我能继续学习下去. 二,环境搭建 1,这里我只讲解Windows,因为我比较喜欢Linux,但是windows 还是必须要用的,所以对linux不是经常用(我不是职业程序猿,只是个业余爱好者),不过这都是很简单的,不论哪个平台,都无所谓了 2,下载Python ,https://www.python.org/downloads/windows/ 选择你

python自学笔记(一)

我没学过python,通过网上和一些图书资料,自学并且记下笔记. 很多细节留作以后自己做项目时再研究,这样能更高效一些. python基础自学笔记 一.基本输入和输出 pthon3.0用input提示用户输入,用print提示用户输出,格式为print("...") 如果格式化输出,那么格式为print("%d" %(变量名)), %d可以替换为%s等其他格式符, 以后用到什么格式自己查,这样学起来高效. 简单的例子: #-*-coding:utf-8-*- nam

Python自学之乐-多继承顺序问题

最近自学Python到面向对象这里,感觉有必要把多继承这里好好理解一下,下面是我自己的一点小总结,如果有朋友觉得有什么不足的,还望不吝赐教! 1.#Author:clark class Animal(object):#动物类 #kind = "" def __init__(self,name,age,food): self.Name = name self.Age = age self.food = food def eat(self): print("%s is eat %

Python自学编程开发路线图(文中有免费资源)

Python核心编程 免费视频资源<Python入门教程>:http://yun.itheima.com/course/145.html Python 基础学习大纲 所处阶段 主讲内容 技术要点 学习目标 第一阶段:python核心编程 计算机组成原理和开发环境 认识操作系统:认识python:开发环境pycharm 可掌握的核心能力:1.掌握基本的Linux系统操作:2.掌握Python基础编程语法:3.建立起编程思维和面向对象思想.可解决的现实问题:字符串排序,切割,逆置:猜数字.飞机大战

Python自学之旅 #新手#MacBook #《“笨办法”学Python》#第六章:常用的简易Python命令、符号、代码、格式化字符串

第六章:常用的简易Python命令.符号.代码.字符串 <“笨办法”学Python>这本书中,确实用了较多篇幅来介绍Python的一些常用简单的命令.符号.代码和字符串等,对于像我这样的自学新手,真的是非常棒,因为它们可以帮我建立接着学下去的信心和兴趣.但我在这个系列的博客当中,不打算写的这么精细,首先因为这不符合我写博的初衷和习惯,其次因为我不打算靠这写书来挣钱,最后因为我确实没有那个实力去挖掘简单东西中更深奥复杂的应用.所以,我写的这个博客,只适合像我这样的自学新手,如果想要成为大神,还是