第一周笔记

第一周笔记,第1张

第一周笔记

图形化程序设计

海龟画图

画笔各种方法:

>>>import turtle #导入turtle模块

>>>turtle.showturtle() #显示箭头

>>>turtle.write("xx") #写字符串

>>>turtle.left(90) #箭头左转90度

>>>turtle.forward(300)#向前300

>>>turtle.goto(0,50)#去坐标(0,50)

>>>turtle.penup()#抬笔,这样路径就不会画出来

>>>turtle.pendown()#下笔,路径就会画出来

>>>turtle.color("")#颜色

>>>turtle.circle()#画圆

>>>turtle.width()#加粗

>>>turtle.done()#窗口执行完仍在

实践:绘制奥运五环

程序的构成

程序由模块组成。一个模块对应一个python源文件,一般后缀名是.py

模块由语句构成,按顺序依次执行

ctrl+s保存

四个空格一个缩进,tab制表符就是四个空格

行连接符:a="sfasa

                      safsa

                      rasa"

对象

一切皆对象,对象由标识,类型,值组成

标识用于用于唯一标识对象,对应于计算机内存中的地址,使用内置函数id(obj)可返回对象bj的标识。

类型用于表是对象存储数据的类型,限制取值范围以及可执行的 *** 作,可以使用type获得所属类型

值表示所存储的数据的信息,使用print可以直接打印出值

本质:一个内存块,拥有特点的值,支持特定类型的相关 *** 作。

 变量(栈内存)是对象(堆内存)的引用,变量存储的是对象的地址,变量通过地址引用了对象。

python是动态类型语言,python解释器自动确定数据类型。

python是强类型语言,支持该类型支持的 *** 作

标识符

类似c语言命名规则,有一点,尽量避免以双下划线开头和结尾,比如__init__是类的构造函数

 变量在使用前必须先被赋值,使用del删除变量

链式赋值:x=y=3

系列解包赋值:a,b,c=4,5,6

这个可实现变量互换

a,b=1,2

a,b=b,a

最基本内置数据类型和基本运算介绍

整型,浮点型,字符串型,布尔型(表示真假)

/ 浮点数除法,得到浮点数         //整数除法         **幂,2**3得到8

divmod()函数同时得到商和余数:divmod(13,3)    (4,1)

比较运算符可以连用

左移1位相当于乘2,左移2位相当于承4

右移1位相当于乘2

整数

0b或0B二进制    0o或oO 八进制   0x或0X 十六进制

布尔值True转为1,False转为0,int(True)结果是1

字符串符合整数格式,直接转为对应整数   int("456")结果是456

python3中,int可以存储任意大,想多大多大,这是python适合科学运算的特点

浮点数

round(value)可以返回四舍五入的值,注:不会改变原有值,而是产生新的值

逻辑运算符

or或,and与,not

同一运算符

用于比较两个对象的存储单元,实际比较的是对象的地址

is:判断两个标识符是不是引用与同一个对象

is not:判断是不是引用不同对象

is和==的区别:is判断是否同一个,即比较对象的地址

                         ==判断值是否相等

整数缓存问题

Python仅仅对比较小的整数对象进行缓存[-5,256],但这只是在命令行中执行,在pycharm和保存为文件执行,范围变成[-5,任意正整数]

字符串

字符串的本质是字符序列,Python的字符串是不可变的,我们无法对原字符串做任何修改,但,可以将字符串的一部分复制到新创建的字符串,达到看起来修改的效果

python不支持单字符类型,单字符也是作为一个字符串使用

Unicode可以标识世界上任何书面语言的字符,使用内置函数ord()那字符转换成对应的Unicode码,chr()把十进制转换成字符

使用单双引号创建,连续三个单引号或者双引号可以帮助我们创建多行字符串

允许空字符串的存在,不包含任何字符且长度为0

len()函数用于计算字符串含有多少字符

字符串拼接: 用+拼接或者空格字符串复制:使用*可以实现复制,

 不换行打印,通过参数(),end="任意字符串",实现末尾添加任何内容

从控制台读取键盘输入的内容:input()

str()实现数字转型字符串,str(5.2)得到'5.2'

使用[]提取字符:

正向搜索,最左侧是第一个字符偏移量是0

反向搜索,最右侧第一个字符偏移量是-1

使用replace替换,返回一个新的字符串,原来的字符串是不可变

字符串切片 *** 作

[起始偏移量:终止偏移量:步长]   步长省略时,不用冒号

起始偏移量小于0,会被当作0,终止偏移量大于长度-1,会被当成-1

 split()分割,,不指定分隔符,则默认空白字符

join拼接函数,"".join(变量)

字符串驻留机制:仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串驻留池中。Python支持字符串驻留机制,对于符合标识符的字符串会触发该机制

成员 *** 作符

in/not in关键字,判断某个字符或者子字符串是否在字符串里

常用查找方法:

a="   "

len(a):字符串长度;a.startwith()以指定字符串开头;a.endeswith()以指定字符串结尾

a.find()第一次出现指定字符串的位置;a.rfind()最后一次出现指定字符串的位置

a.count()指定字符串出现了几次;a.isalnum所有字符全是字母或数字

去除首尾信息

我们可以通过strip()去除字符串首尾指定信息(只是首尾),lstrip()去除左边指定信息,rstrip()去除右边指定信息

大小写转换

a.capitalize()产生新的字符串,首字母大写;a.title()每个单词首字母都大写;

a.upper()所有字符全转成大写;a.lower()产生新的字符串,所有字符全转成小写;

a.swapcase()所有字母大小写互换;

格式排版

center();ljust();rjust()

其他方法

isalnum()是否为字母或数字;isalpha()检测字符串是否只由字母组成(含数字)

isdigit()检测字符串是否只由数字组成;isspace()检测是否为空白符

isupper()检查是否为大写字母;islower()检测是否为小写字母

字符串的格式化

format()基本用法,基本语法是用过{}和:来代替c的%

 填充与对齐

^><分别是居中右对齐和左对齐,后面带宽度

:后带填充的字符,只能是一个,不指定默认用空格填充

数字格式化

 可变字符串

使用io。StringIO对象或array模块

序列

序列就是一块用来存放多个值的连续的内存空间,存储的是对象地址,不存储对象的值

例如:字符串,列表,元组,字典,集合

列表

存储任意数目,任意类型的数据集合,列表大小可变,根据需要随时增加或减小

一.列表的创建

基本语法创建[]:a=[10,20,"bbq"]

list()语法创建:可以将任何可迭代的数据转化承列表

range()可以帮我们非常方便的创建整数列表,默认步长为1,python3中返回的是一个range对象,而不是列表,我们需要通过list()方法将其转换成列表对象

二.增加和删除

 a=[20,40]

a.append([80])      [20,40,80]   原地修改列表对象

a=a+[50]        [20,40,50]    创建新的列表对象

a.extend([80])   [20,40,80]   原地 *** 作,不创建新的列表对象

a.insert(2,100)   [20,40,100]   插入涉及元素拷贝

乘法扩展

del a[1]      [20]   删除指定位置的元素

a.pop()      [20]   删除并返回指定位置的元素,该例返回40,未指定则 *** 作最后一个元素

a.remove(20)    [40]   删除首次出现的指定元素,不存在则报错

三.访问和计数

通过索引直接访问   a[1]    40    注意长度

a.index(value,start,end)  获得索引位置

a.count()  获得出现次数

len(a)   返回列表长度

四.成员资格判断

count方法,一般用in和not in   20 in a   返回True

五.切片 *** 作和字符串 *** 作一样

六.列表排序

修改原列表,不建新列表的排序

a.sort()默认升序排序

a.sort(reverse=True) 降序排列

import random

random..shuffle(a) 打乱顺序

建新列表的排序,sort改为sorted

reversed()返回迭代器,不对原列表做任何修改,只是返回一个逆序排列的迭代器对象,只能用一次,要用的话list(x)

七.其他内置函数

max(),min(),sum()

八.二维列表

 引用:a[0]  a[0][3]

元组

元组不可变序列,没有增加,修改,删除相关的方法

访问和处理速度比列表快

可以作为字典的键,列表则永远不能作为字典的键使用

一.创建

a=()创建或者a=10,20  如果元组只有一个元素,必须加逗号

b=tuple(可迭代的对象),与list类似

二.访问和计数

也是索引访问,不能修改元素

三.切片同列表

四.排序

只能使用内置函数sorted(),并生成新的元组对象

zip(列表1,列表2……)将多个元素合并成元组,并返回这个zip对象,只能用一次

字典

字典是“键值对”的无序可变序列,字典中的每一个元素都是一个“键值对”,包含“键对象”和“值对象”,可以通过“键对象”实现快速获取,删除,更新对应的“值对象”。“键”是任意的不可变数据,比如:整数,浮点数,字符串,元组,但是,列表,字典,集合这些可变对象,不能作为“键”,且“键”不能重复,“值”可以是任意的数据,并且可重复

一.字典的创建

二.访问

1.通过[键]获得值,若键不存在,则报出异常

2.通过get()获得值,若不存在,返回None   a.get()

3.列出所有键值对 a.items()

4.列出所有的键,所有的键

a.keys()       a.values()

5.len(a) 键值对的个数

6.检测一个键是否位于字典   in a

三.添加,修改,删除

1.新增键值对,键已存在,则覆盖,不存在则新增

例如a['address']='某地'

2.使用update(),a.update(b),将b连接在a后头,重复,则b覆盖a

3.del()删除指定键,clear()删除所有,pop()删除并返回键所对应值对象

4.popitem()随机删除和返回该键值对,适合一个接一个移除并处理项

四.序列解包

可以用于元组,列表,字典;方便对多个变量赋值

x,y,z=[20,30,40]

[a,b,c]=[20,30,40]

默认对键 *** 作,对键值 *** 作,使用a.items(),对值 *** 作,使用a.values()

集合

无序可变,元素不能重复,集合底层是字典实现,集合的所有元素都是字典的“键对象”,因此是不能重复且唯一的

一.创建与删除

{}创建,a.add()添加新元素

set()将列表,元组等可迭代对象转成集合,如果重复,保留一个

同数学一样,|交集,&并集,-差集

控制语句

一.选择结构

单分支结构语法形式:
if 条件表达式(逻辑表达式,关系表达式,算术表达式,不能含有=,不会执行):

      语句/语句块(可以是一条或多条,多条缩进必须一致)

条件表达式的值为False的情况:

False,0,0.0,空值None,空序列对象(空列表,空元组,空字典,空字符串),空range对象,空

迭代对象,其他情况均为True,python所有的合法表达式都可以看作条件表达式,甚至包括函数调用的表达式

双分支结构语法

在单分支后加个else:

三分条件运算符:

条件为真时的值 if  (条件表达式) else 条件为假的值

多分支结构:

if 条件表达式1:

    语句1

elif 条件表达式2:

    语句2

……

[else :

    语句n+1

](计算机行业,描述语法格式时,使用中括号通常表示可选,非必选)

几个分支之间时有逻辑关系的,不能随意颠倒顺序

选择结构的嵌套:

缩进量决定了代码的从属关系

二.循环结构

while循环

while (条件表达式):

for循环

格式:for 变量 in 可迭代对象

                循环体语句

可迭代对象:

1.序列,包含字符串,元组,列表,字典

2.迭代器对象

3.生成器函数

嵌套循环

break语句和continu语句同c语言

else语句

while,for循环可以附带一个else语句(可选),如果for,while语句没有呗break语句结束,就是正常执行完,则会执行else语句,否则不执行,语法格式如下:

在前两个循环后加esle:

循环代码优化

1.尽量减少循环内部不必要的计算

2.嵌套循环中,尽量内层循环的计算,尽可能向外提

3.局部变量查询较快,尽量使用局部变量

其他优化手段

使用join;列表插入和删除,尽量在尾部

zip实现并行迭代

三.推导式创建序列

列表推导式

语法:[表达式 for item in 可迭代对象]

或者[表达式 for item 可迭代对象 if 条件判断]

字典推导式

{key:value for 表达式 in 可迭代对象}

都可增加if条件判断,多个for循环

集合推导式

就少了value

生成器推导式(生成元组)

元组没有推导式,一个生成器只能运行一次,第一次得到数据,第二次就没有了

函数

Python中函数的分类

1.内置函数,比如str(),llist(),len()

2.标准库函数,通过import语句导入

3.第三方库函数,下载后使用

4.用户自定义函数

定义语法:def 函数名([参数列表])

                      "'文档字符串'"(函数的注释)

                    函数体/若干语句

要点;

1.def定义函数,就是一个空格和函数名称

2.参数列表

(1)圆括号内时形参,有多个参数则使用逗号隔开

(2)形参不需要声明类型,也不需要指定函数返回值类型

通过调用help(函数名.__doc__)可以打印输出函数的文档字符串

函数也是对象,内存底层分析

可以作为参数传递,也可以返回值传递

变量

全局变量:

1.函数和类定义之外声明的变量。作用域为定义的模块,从定义位置开始直到模块结束

2.全局变量降低函数的通用性和可读性,应尽量避免全局变量的使用。

3.全局变量一般做常量使用

4.函数内要改变全局变量的值,使用global声明一下

局部变量:

1.在函数体内(包括形式参数)声明的变量

2.局部变量的引用比全局变量快,优先考虑使用

3.使用局部变量和全局变量同名,则在函数内隐藏全局变量,只使用同名的局部变量

参数的传递

Python中参数的传递都是“引用传递”,不是“值传递”

一.可变对象(字典,  列表,集合,自定义的对象等)

传递参数是可变对象,实际传递的还是对象的引用。在函数体内不创建新的对象拷贝,二十可以直接修改所传递的对象

二.不可变对象(int,float,字符串,元组,布尔值等)(浅拷贝)

实际传递还是对象的引用,在“赋值 *** 作”时,由于不可变对象无法修改,系统会创建一个新的对象

传递不可变中含有可变,含有的可变一样能修改

浅拷贝和深拷贝

浅拷贝:不拷贝子对象的内容,只拷贝子对象的引用(修改自己原来有的)

深拷贝:连子对象的内容也全部拷贝一份,对子对象的修改不影响原来的

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5711092.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存