一、模块

    模块分两种:标准库和第三方库,标准库是不需要安装就可以使用的库。
    import [模块名]:导入一个库,优先是在项目路径中寻找。自定义模块名不要和标准库模块名相同。

1.sys模块

import sys
print(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 sys
print(sys.argv)

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

2.os模块

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

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

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

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

3.第三方模块

    即自定义的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,5
result = a if a>b else c
print(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"]
    取一个值:
index=1
names[index] #取出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] = 10
names2[3][1] = 'c'
print(names)
print(names2)

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

        若要使用真正的copy则需要导入copy模块:
import copy
names = [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")
    例如,使用元组来保存不可变数据,例如数据库连接信息。

九、判断值是否为数值

 例如输入8,实际上input接受到的是字符串,需要使用int(num)来强制转换为int类型。
num = input("please input a num")
if num.isdigit():
num = int(num)

十、字符串操作

    字符串的值是不能更改的,所有在字符串上做的改变操作,内部都是重新产生了一个字符串来覆盖原本的字符串。
 
name = "leo zheng leokale"
    首字母大写(capitalize):name = 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("".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'] = 44
print(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)

Python自学day-2的更多相关文章

  1. python自学笔记

    python自学笔记 python自学笔记 1.输出 2.输入 3.零碎 4.数据结构 4.1 list 类比于java中的数组 4.2 tuple 元祖 5.条件判断和循环 5.1 条件判断 5.2 ...

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

    一.概述 终于把公司的资产管理网站写完,并通过测试,然后上线.期间包括看视频学习.自己写前后端代码,用时两个多月.现将一些体会记录下来,希望能帮到想学django做web开发的人.大牛可以不用看了,小 ...

  3. 拎壶冲冲冲专业砸各种培训机构饭碗篇----python自学(一)

    本人一直从事运维工程师,热爱运维,所以从自学的角度站我还是以python运维为主. 一.python自学,当然少不了从hello world开始,话不多说,直接上手练习 1.这个可以学会 print( ...

  4. [Python自学] day-21 (2) (Cookie、FBV|CBV装饰器)

    一.什么是Cookie 1.什么是Cookie? Cookie是保存在客户端浏览器中的文件,其中记录了服务器让浏览器记录的一些键值对(类似字典). 当Cookie中存在数据时,浏览器在访问网站时会读取 ...

  5. [Python自学] day-21 (1) (请求信息、html模板继承与导入、自定义模板函数、自定义分页)

    一.路由映射的参数 1.映射的一般使用 在app/urls.py中,我们定义URL与视图函数之间的映射: from django.contrib import admin from django.ur ...

  6. [Python自学] day-20 (Django-ORM、Ajax)

    一.外键跨表操作(一对多) 在 [Python自学] day-19 (2) (Django-ORM) 中,我们利用外键实现了一对多的表操作. 可以利用以下方式来获取外键指向表的数据: def orm_ ...

  7. [Python自学] day-19 (2) (Django-ORM)

    一.ORM的分类 ORM一般分为两类: 1.DB first:先在DB中创建数据库.表结构,然后自动生成代码中的类.在后续操作中直接在代码中操作相应的类即可. 2.Code first:直接在代码中实 ...

  8. [Python自学] day-19 (1) (FBV和CBV、路由系统)

    一.获取表单提交的数据 在 [Python自学] day-18 (2) (MTV架构.Django框架)中,我们使用过以下方式来获取表单数据: user = request.POST.get('use ...

  9. [Python自学] day-18 (2) (MTV架构、Django框架、模板语言)

    一.实现一个简单的Web服务器 使用Python标准库提供的独立WSGI服务器来实现MVC架构. 首先,实现一个简单的Web服务器: from wsgiref.simple_server import ...

  10. Python自学之路---Day13

    目录 Python自学之路---Day13 常用的三个方法 匹配单个字符 边界匹配 数量匹配 逻辑与分组 编译正则表达式 其他方法 Python自学之路---Day13 常用的三个方法 1.re.ma ...

随机推荐

  1. jieba(结巴)—— Python 中文分词

    学术界著名的分词器: 中科院的 ICTCLAS,代码并不十分好读 哈工大的 ltp, 东北大学的 NIU Parser, 另外,中文 NLP 和英文 NLP 不太一致的地方还在于,中文首先需要分词,针 ...

  2. sklearn 下的流行学习(Manifold Learning)—— sklearn.manifold

    1. t-SNE from sklearn.manifold import TSNE X_proj = TSNE(random_state=123).fit_transform(X) 2. t_sne ...

  3. iOS8的APP过渡过程

    1. 2. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWluX3hpYW53ZWk=/font/5a6L5L2T/fontsize/400/fill/ ...

  4. Atitit.故障排除系列---php 计划网站数据库错误排除过程

    Atitit.故障排除系列---php 计划网站数据库错误排除过程 Php页面报告的错误不能定位到myusql的db配置上...字说是db conn err Mysql 接入错误...大概查看哈能不能 ...

  5. Poco logger 日志使用小析

    Poco logger 日志使用小析 Poco logger 日志使用小析 日志 logger 库选择 Pocologger 架构简析 步骤一 生成消息 步骤二 写入logger 步骤三 导入chan ...

  6. Ubuntu下可以直接安装mingw(sudo apt-get install mingw32 mingw32-binutils mingw32-runtime,附例子,简单好用,亲测成功)good

    Mingw:在Linux系统下编译Windows的程序 Ubuntu下可以直接安装:sudo apt-get install mingw32 mingw32-binutils mingw32-runt ...

  7. WPF与缓动(四) 弧形缓动

    原文:WPF与缓动(四) 弧形缓动    WPF与缓动(四)  弧形缓动                                                                 ...

  8. linux_crontab_定时删除

    #每天2:30 删除4天前qac的原始log30 2 * * * find /home/iknow/ETL/RetlPull/retl-pull/data/qac -name qac.log.new. ...

  9. [GEiv]第七章:着色器 高效GPU渲染方案

    第七章:着色器 高效GPU渲染方案 本章介绍着色器的基本知识以及Geiv下对其提供的支持接口.并以"渐变高斯模糊"为线索进行实例的演示解说. [背景信息] [计算机中央处理器的局限 ...

  10. ESB (Enterprise Service Bus) 入门

    在本文中,ESB相关技术概念和术语.其他需要了解的入门的基础知识,并介绍了一些初步的了解ESB产品.因为它是一个新的ESB.将自己的学习内容与过程,记录下来! 愿在这里与大家分享一下,共同进步与提高! ...