分类目录归档:python

[学习笔记]python基础


1.多行输入:

”’…….”’

e.g.>>>print(”’112121212

…212121212

”’)

2.转义

把普通字符转义成控制字符,或者将控制字符转义成普通字符.

使用\x来进行转义.后加多个字符如\xzxzxzxzx时,只转义第一个x.

如换行\t,\n

notice:”\\”使用print(‘\\’)

3.与或非:

(不知道有没有c里面那种更便捷的写法)

and运算是与运算,只有所有都为Trueand运算结果才是True

or运算是或运算,只要其中有一个为Trueor运算结果就是True

not运算是非运算,它是一个单目运算符,把True变成FalseFalse变成True:(可以理解成逻辑上的取反)

4.表达式的值:

例如”5>3″,这是一个正确的表达式,所以返回True

notice:”True”的’t要大写’

5.空值

用None来表示

6.常量

可以理解为预先设定好的变量.常用大写字母表示

6.除法

a.浮点除(自创名字233

/

返回的值的类型是浮点数

(question:那么把它赋值给BOOL会发生类型错误吗?)

answer:会发生这样的错误:

 

>>> a=True
>>> a=6/5
File “<stdin>”, line 0

^
SyntaxError: ‘utf8’ codec can’t decode byte 0xc3 in position 2: invalid continuation byte

果然会发生类型错误

b.地板除(说实话我不知道命名的人怎么想的……)

//

这种除法只会返回整形数值(即使实际上除不尽)

c.余数计算

记得在c里面这个经常被作为算那啥用啊

%

返回除后的余数

7.ord()

使用ord()可以将单个字符转化为字符编码

notice:字符要用(‘x’)框住,不能直接输

8.chr()

使用chr()可以将字符编码转化为单个字符

9.str&bytes

bytes比较节约空间,str方便使用.

bytes的数据使用b’xxx’表示

使用len()可以计数

他的.replace(‘原字符’,’要转换成的字符’)可以把一个str的字符串中的某些字符进行替换.

10.encode()

(一般来说)该方法可以将str类型数据(以unicode储存)编码为bytes类型数据(以utf-8储存).

notice:在输入unicode类型字符串时,需要使用u’……’来表示

栗子:

>>’薛定谔’.encode(‘utf-8’)

但是notice:即使是薛定谔,也无法将’薛定谔’转化为ascii编码(但是人家并不在意)

如果强制转换为ascii,会返回以下错误:

 

File “<stdin>”, line 1, in <module>
UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-2: ordin
al not in range(128)

总之:

>>'<要转换的东西>’.encode(‘<编码类型>’)

不用打;真是爽

11.decode()

该方法将bytes数据转换为str类型数据

使用方法略,和上面一样(懒得写)

12.代码的编码

请在代码开头插上这两句,pythonforwindows会自动吃掉第一句,不会吐出来.

顺便一提,windows那群傻逼搞了一个东西,他们在文本文件头上写了BOM,因此你必须要确保文本编辑器正在使用UTF-8 without BOM编码;

13.print的格式化输出

栗子:

>>”%s,你欠我%s元钱!” % (“medicine,”666666)

一个愚蠢的方式是,处处使用%s类型,因为py有自动类型转换!

占位符规则与c相同,我可不认为你没上过.

14.数据类型:list(实质上就是一个二维数组)

>>><list名>=[“<成员名>”,”<成员名>”]

成员的类型可以不同,并且一个list可以包含另一个list

栗子:

>>>p=[“xxx”,”yyy”,[“aaa”,”bbb”],”ccc”]#此时使用len返回4,因为套入其中的list被视为p的一个成员

>>>a=[“xzxzx”,”zxzxz”,p]#实际上也等于这样

使用len()可以获得list的成员数量

notice:最后一个成员的编号为len(<name>)-1

notice:当然和c相同,list同样从0开始.

使用<name>[<number>]

来获取成员的数值

不用声明数组,也不用声明类型,这很爽!

a.list的append()方法可以追加成员到末尾.

b.list的insert()方法可以在某编号插入一个成员.

c.要删除成员,可以使用pop方法.如果pop()为空,那么删除该list的最后一个成员.

d.list的sort方法可以令他倒过来

15.数据类型:tuple

它叫做元组,一旦初始化就无法改变.没有方法.

notice:如果要写一个空的元组,应该使用xxx().但是如果要写一个只有一个元素的,应该使用xxx(a, )

16.if

e.g:

if<语句条件>:

<语句>#tab键我这里打不出来

elif<条件判断>:#这个句子可以没有

<语句>

else:

<语句>

简写方式:

只要x是非零数值、非空字符串、非空list等,就判断为True,否则为False

17.input()

该函数可以作为右值.

返回str类型数据

e.g

18.int()

将str类型数值转换为int类型

19.判断示例代码:

 

20.循环:
话说这个没有花括号好不习惯……
第一种:代迭出表的每一个元素
for..(一般是要输出的变量)…in..(被循环的表)..:

notice:记得在需要执行的语句前面打几个空格,否则会出现如下错误:

插曲a.
range(int)
输入一个数字,产生0到这个数字之间的所有数字
插曲b.
list(int)
可以将range的输出值转换为list型值

栗子:range(101)生成0~100的…

第二种:while…..:
循环
……中填写条件
利用缩进标志代码块
参考答案,

# -*- coding: utf-8 -*-
L = [‘Bart’, ‘Lisa’, ‘Adam’]
#请利用循环依次对list中的每个名字打印出Hello, xxx!:
for name in L:
print(“hello,”,name)

#vim在复制出来这方面真难用啊

21.数据结构:dict(字典)

声明:名称 = {项目: 值}

引用:名称[项目]

方法

1.get方法

名称.get(项目)

当该项目不存在时,返回none

OR

名称.get(项目,-1)

当该项目不存在时,返回-1

等价的,用于检测该项目是否为空的方法:

项目 in 名称

如果无则返回flase

2.pop方法

用于删除一个项目

例子:名称.pop(项目)

请务必注意,dict内部存放的顺序和key放入的顺序是没有关系的。

以下抄的:

和list比较,dict有以下几个特点:

  1. 查找和插入的速度极快,不会随着key的增加而增加;
  2. 需要占用大量的内存,内存浪费多。

而list相反:

  1. 查找和插入的时间随着元素的增加而增加;
  2. 占用空间小,浪费内存很少。

所以,dict是用空间来换取时间的一种方法。

dict可以用在需要高速查找的很多地方,在Python代码中几乎无处不在,正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象

22.数据结构:set

需要一个list作为输入创建set

其内部是一个无序的结构

会忽略重复对象

xxx={[a,b,c]}

通过xxx.add方法可以添加成员到xxx中,例如:xxx.add(d)

于是会有:

>>>xxx

>>>{a,b,c,d}

由于他在数学上被视为一个集,其可以做交集,并集操作.

例如:xxx & yyy#交集

xxx | yyy #并集

23.调用函数

内置的函数可以直接调用

24.abs以及max

abs()输入一个数,返回一个绝对值

max()输入一组数,逗号隔开,返回其中最大的数.

函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”:

e.g

a=abs

此时就可以通过a()的方法来调用abs()

25.函数的定义

使用def name(input):

在缩进中编写函数

而在函数体内部使用return 来返回,可以用return x,y来返回多个值

在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。

e.g.x,y=cc(1,2,3)与xx=cc(1,2,3)的cc函数的传出数据是相同的

同时的,在定义时,可以用def xx(x,y)来传入多个参数

也可以用def xx(x,y=123)类似于这样的方式来使用默认参数.默认参数会在参数未指定的情况下来自动代入.

默认参数必须指向类似于None这样的对象(不变对象)

可变对象一般是list var int float这样的变量

noticea:对于像def xx(x,y=123,z=456)这样的参数,我们可以进行类似于xx(1,z=123)这样的调用.

noticeb:必选参数必须放在前面.

26.导入函数

使用

from _file_name(don’t add .py) import _function_ name来导入函数

27.空函数

使用pass来创建一个空函数

28.参数检查

e.g.这里如果不是传入int或者float类型的函数,就会报错,但是这个我也没看懂

和可变参数类似,也可以先组装出一个dict,然后,把该dict转换为关键字参数传进去:

当然,上面复杂的调用可以用简化的写法:

**extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数,kw将获得一个dict,注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra

类似于def xxx(x,y,*,a,b):这样的参数,我们把它叫做命名关键字参数,它使一个函数只接收必要的x y 以及不一定要的a b.

但是记住,传入命名关键字参数时,我们需要这样写:

xxx(1,2,a=3,b=4)

命名关键字关键字参数可以有缺省值,例如def xxx(x,y,*,a=123,b):

在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用,除了可变参数无法和命名关键字参数混合。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数/命名关键字参数和关键字参数。

31.递归函数

在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。<gnu linux x64 py3.4.3测试:最高998次递归>