自学python笔记

import math
mList = [‘Tom‘,‘Joy‘,‘Mal‘]
mTuple = (1,2,‘Tom‘)
mDict = {‘Tom‘:99,‘Joy‘:88,‘Mal‘:77}
mSet = set([1,2,3])
mStr = ‘ABCD‘
mGenerator = (x * x for x in range(1,10))
#切片
l = mList
print(l)
print(l[0:3])
print(l[0:2])
print(l[-2:-1]) #支持最后一个节点为-1
print(l[:1]) #默认为0时可以省略

#迭代
for x in mList:
print(x)
for x in mStr:
print(x)
from collections import Iterable
print(isinstance(‘abc‘, Iterable)) # str是否可迭代
#同时引用了两个变量,在Python里是很常见的
for x, y in [(1, 1), (2, 4), (3, 9)]:
print(x, y)
#Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身
for i,value in enumerate(mList):
print(i,value)

#列表生产式
#列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。
l = []
for x in range(1,10):
l.append(x)
print(l)
#2
l = []
for x in range(1,10):
l.append(x*x)
print(l)
#3
l = [x*x for x in range(1,10)]
print(l)
#4 包含if判断
l = [x*x for x in range(1,10) if x % 2 == 0 ]
print(l)
#5 双层循环
l=[m + n for m in ‘ABC‘ for n in ‘abc‘]
print(l)
#6 运用列表生成式,可以写出非常简洁的代码。例如,列出当前目录下的所有文件和目录名,可以通过一行代码实现
import os #导入os模块
l = [d for d in os.listdir(‘.‘)] # os.listdir可以列出文件和目录
#7for循环其实可以同时使用两个甚至多个变量,比如dict的items()可以同时迭代key和value:
for k,v in mDict.items():
print(k,‘=‘,v)

#生成器
#通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,
#不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

#所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?
#这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。
#要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator
l = [x * x for x in range(1,10)] #list
g = (x * x for x in range(1,10)) #generator
#一个一个打印出来,可以通过next()函数获得generator的下一个返回值
print(next(mGenerator))
for x in mGenerator:
print(x)
#如果推算的算法比较复杂,用类似列表生成式的for循环无法实现的时候,还可以用函数来实现。
def fib(max):
n, a, b = 0, 0, 1
while n<max:
print(b)
a, b = b, a + b
n = n + 1
return ‘done‘
#上面的函数和generator仅一步之遥。要把fib函数变成generator,只需要把print(b)改为yield b就可以了
def fib(max):
n, a, b = 0, 0, 1
while n<max:
yield b
a, b = b, a + b
n = n + 1
return ‘done‘
#这里,最难理解的就是generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。
#而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
def odd():
print(‘step 1‘)
yield 1
print(‘step 2‘)
yield(3)
print(‘step 3‘)
yield(3)
o = odd()
print(next(o),next(o),next(o))
#但是用for循环调用generator时,发现拿不到generator的return语句的返回值。
#如果想要拿到返回值,必须捕获StopIteration错误,返回值包含在StopIteration的value中
g = fib(6)
while True:
try:
x = next(g)
print(‘g:‘, x)
except StopIteration as e:
print(‘Generator return value:‘, e.value)
break

时间: 2024-10-03 13:23:13

自学python笔记的相关文章

自学python笔记(三)

周末,但我这不适合有周末啊,七点九醒了,继续看看python吧,昨天下载了一个工具PyCharm,这工具和idea是一家的.用法差不多,今天继续看看基础. 编写格式:python对大小写特别敏感,书写时需注意 语法:采用缩进方式,以#开头的语句是注释,注释是给人看的,可以是任意内容,解释器会忽略掉注释.其他每一行都是一个语句,当语句以冒号:结尾时,缩进的语句视为代码块. 缩进有利有弊.好处是强迫你写出格式化的代码,但没有规定缩进是几个空格还是Tab.按照约定俗成的管理,应该始终坚持使用4个空格的

自学python核心编程

之前看过一段时间的小甲鱼零基础自学python,b站上有高清免费资源[av4050443],但是作为零基础实在学得艰难,下载了python核心编程pdf,在这里做一些笔记. 虽然使用的是第二版的教材,但我使用的是python3.5.2,感觉上差别不大,可以阅读. 这里从第二章的练习题开始! -------------------------------------------------------- 2 - 5:用while 和for 打印0-10: i = 0 while i < 11: p

孤荷凌寒自学python第五十二天初次尝试使用python读取Firebase数据库中记录

(完整学习过程屏幕记录视频地址在文末) 今天继续研究Firebase数据库,利用google免费提供的这个数据库服务,今天主要尝试使用firebase_admin模块来连接firebase数据库. 获得成功. 一.简单总结下今天对firebase_admin模块对象的学习 (一)要通过firebase_admin模块连接到firebase数据库,那么必须要拥有一个从firebase网站上自己的数据库的[用户和权限]处设置的'连接私钥'等相关信息的一个json文件,并下载到项目文件夹中来. (二)

孤荷凌寒自学python第六十六天学习mongoDB的基本操作并进行简单封装5

孤荷凌寒自学python第六十六天学习mongoDB的基本操作并进行简单封装5并学习权限设置 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第十二天. 今天继续学习mongoDB的简单操作,并继续对一些可能反复经常使用的操作进行简单的封装.同时通过搜索了解了如何对本地Mongo数据库进行权限设置(没有实践本地数据库的用户权限设置.) 按个人规划,今天是初步了解学习MongoDb数据库的最后一个学习日,后续将在真正使用此数据库时,再对其进行深入研究. 一.今天完成了两个可

孤荷凌寒自学python第八十天开始写Python的第一个爬虫10

(完整学习过程屏幕记录视频地址在文末) 原计划今天应当可以解决读取所有页的目录并转而取出所有新闻的功能,不过由于学习时间不够,只是进一步优化了自定义函数的写法. 一.优化并新增了几个操作word文档的函数 ``` #!/usr/bin/env python3 # -*- coding: utf-8 -*- import string import time import random from docx.enum.style import WD_STYLE_TYPE #所有样式 (包括段落.文字

孤荷凌寒自学python第八十二天学习爬取图片2

(完整学习过程屏幕记录视频地址在文末) 今天在昨天基本尝试成功的基础上,继续完善了文字和图片的同时爬取并存放在word文档中. 一.我准备爬取一个有文字也有图片的博客页面 https://www.cnblogs.com/forever-snow/p/8506746.html 二.具体代码 ``` import requests from bs4 import BeautifulSoup import re import datetime import pymongo import os from

孤荷凌寒自学python第八十六天对selenium模块进行较详细的了解

(今天由于文中所阐述的原因没有进行屏幕录屏,见谅) 为了能够使用selenium模块进行真正的操作,今天主要大范围搜索资料进行对selenium模块的学习,并且借2019年的新年好运居然在今天就来了,还在学习Python的过程中就接到一个任务,完成了第一个真正有实用价值的作品,大大增强了信心,也对Python爬取内容,操纵网页的能力有了真切的体会. 一.首先真诚感谢以下文章作者的无私分享: 查找到html页面标签对象方法的参考 https://www.cnblogs.com/zhuque/p/8

Python笔记_01列表 和元祖

Python笔记 第一章 列表和元祖 1.通用序列操作 所有序列都可以进行某些特定操作,包括:索引(indexing).分片(slicing).加(adding).乘(multiplying)以及检查某元素是否属于列表成员. 迭代:依次对序列中的每个元素重复执行某些操作. 序列的索引:通过元素在列表中的位置可以定位到该元素,这就是列表的索引,使用类似于list[0]对元素进行索引,索引0指向第一个元素.也可使用负数对元素进行索引,使用负数对元素索引时,列表中的最后一个元素由-1表示,例如list

【转载】如何系统地自学 Python?

原文:如何系统地自学 Python? 作者:彭猫 本文由 知乎 彭猫 授权发布,版权所有归作者,转载请联系作者! 是否非常想学好 Python,一方面被琐事纠缠,一直没能动手,另一方面,担心学习成本太高,心里默默敲着退堂鼓? 幸运的是,Python 是一门初学者友好的编程语言,想要完全掌握它,你不必花上太多的时间和精力. Python 的设计哲学之一就是简单易学,体现在两个方面: 语法简洁明了:相对 Ruby 和 Perl,它的语法特性不多不少,大多数都很简单直接,不玩儿玄学. 切入点很多:Py