Python 基础笔记

来源:互联网 发布:Windows的sleep 编辑:程序博客网 时间:2024/05/18 01:47
一、由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:
#!/usr/bin/env python3# -*- coding: utf-8 -*-

第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;

第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。

二、在Python中,采用的格式化方式和C语言是一致的,用%实现

%运算符是用来格式化字符串的。在字符串内部,%s表示用字符串替换,%d表示用整数替换,有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?,括号可以省略。

常见的占位符有:

%d整数%f浮点数%s字符串%x十六进制整数

如果你不太确定应该用什么,%s永远起作用,它会把任何数据类型转换为字符串,%%来表示一个%


三、

list

Python内置的一种数据类型是列表:list,用索引来访问list中每一个位置的元素,索引是从0开始。

list = ['One','Two',Three'] , list[0]

如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素。

list[-1]

使用append往list中追加元素到末尾。

list.append('Four')

也可以把元素插入到指定的位置,比如索引号为1的位置

list.insert(1,'Five')

要删除list末尾的元素,用pop()方法

list.pop()

要删除指定位置的元素,用pop(i)方法

list.pop(1)

要把某个元素替换成别的元素,可以直接赋值给对应的索引位置

list[1] = 'Six'


tuple

另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改

不可变的tuple有什么意义?因为tuple不可变,所以代码更安全,跟Java变量的final定义一样。如果可能,能用tuple代替list就尽量用tuple。

tuple的陷阱:当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来,所谓的“不变”是说,tuple的每个元素,指向永远不变


四、条件判断

if <条件判断1>:    <执行1>elif <条件判断2>:    <执行2>elif <条件判断3>:    <执行3>else:    <执行4>
if语句执行有个特点,它是从上往下判断,如果在某个判断上是True,把该判断对应的语句执行后,就忽略掉剩下的elifelse


五、循环

Python的循环有两种,一种是for...in循环。第二种循环是while循环,只要条件满足,就不断循环,条件不满足时退出循环。使用方法跟Java一样。


六、函数

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

可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。

七、递归

解决递归调用栈溢出的方法是通过尾递归优化,事实上尾递归和循环的效果是一样的,所以,把循环看成是一种特殊的尾递归函数也是可以的。

尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。

尾递归调用时,如果做了优化,栈不会增长,因此,无论多少次调用也不会导致栈溢出。

遗憾的是,大多数编程语言没有针对尾递归做优化,Python解释器也没有做优化,所以,即使把上面的fact(n)函数改成尾递归方式,也会导致栈溢出。

0 0