Python随学随记(1)
来源:互联网 发布:groovy 数组 编辑:程序博客网 时间:2024/05/21 21:37
直接运行python文件
在Windows上是不行的,但是在Mac和Linux上是可以的
方法是在.py文件的第一行加上一个特殊的注释.
#!/usr/bin/env python3
按utf-8编码读取
#!/usr/bin/env python3#-*- coding: utf-8 -*-
编译器、解释器(简单理解)
它们是负责把符合语法的程序代码转换成CPU能够执行的机器码,然后执行
解释器是一条一条的解释执行源语言
编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,速度快.
十六进制的前缀
十六进制用0x前缀和0-9 a-f表示
浮点数
浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,
一个浮点数的小数点位置是可变的,比如,1.23x10^9和12.3x10^8是完全相等的
浮点数可以用数学写法,但对于很大或很小的浮点数就必须用科学记数法 用e代替10.
如何使字符串不转义
在’(单引号)、”(双引号)、”’(三引号)前加r
如:
>>> print r"\t\t\t" \t\t\t
特殊的空值
None
不是0, 因为0是有意义的
静态语言
静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错.
常量
常量就是不能变的变量 通常用全部大写的变量名来表示常量.
chr()、unichr()和ord()
ord( )
:接受一个参数 返回单字符在ASCII中对应的整数 chr( )
:与ord()相反,返回参数所对应的ASCII字符 unichr( )
:与chr( )一样 只不过返回的是unicode字符
- chr
是character的缩写,即字符
- ord
是unicode ordinal的缩写,即编号
- 但是由于chr局限于ascii,长度只有256,于是又多了个unichr.
- 在bytes中,无法显示为ASCII字符的字节,用\x##
显示
常见占位符
%c
转换成字符(ASCII 码值,或者长度为一的字符串) %r
优先用repr()
函数进行字符串转换(Python2.0新增) %s
优先用str()
函数进行字符串转换 %d/%i
转成有符号十进制数 %u
转成无符号十进制数 %o
转成无符号八进制数 %x / %X
(Unsigned) 转成无符号十六进制数(x / X 代表
转换后的十六进制字符的大小写) %e / %E
转成科学计数法(e / E控制输出e / E) %f / %F
转成浮点数(小数部分自然截断) %g / %G
是%e和%f / %E和%F 的简写 %%
输出%
其中,格式化整数和浮点数还可以指定是否补0和整数与小数的位数:
>>> '%2d-%02d' % (3, 1)' 3-01'>>> '%.2f' % 3.1415926(%后面的点是关键)'3.14'
要避免key不存在的错误,有两种办法
一是通过in判断key是否存在:
>>> 'Thomas' in dFalse
二是通过dict提供的get方法,如果key不存在,可以返回None
,或者自己指定的value:
>>> d.get('Thomas')>>> d.get('Thomas', -1)-1
list和dict的比较
- dict:
- 查找和插入的速度极快,不会随着key的增加而增加
- 需要占用大量的内存,内存浪费多
- 正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象.
- list:*重点内容*
- 查找和插入的时间随着元素的增加而增加
- 占用空间小,浪费内存很少.
cmp(x,y) 函数
用于比较2个对象,如果 x < y
返回 -1
, 如果 x == y
返回 0
, 如果 x > y
返回 1
.
print "cmp(39, 232) : ", cmp(39, 232)cmp(39, 232) : -1
函数部分易错点
定义函数时,需要确定函数名和参数个数
如果有必要,可以先对参数的数据类型做检查
函数体内部可以用return
随时返回函数结果
函数执行完毕也没有return
语句时,自动return None
函数可以同时返回多个值,但其实就是一个tuple
定义默认参数要牢记一点:默认参数必须指向不变对象.
在参数前加一个*
就可以把函数的参数改为可变参数, 调用该函数时,可以传入任意个参数,包括0个参数
在Python中定义函数,可以用必选参数、默认参数、可变参数和关键字参数.
通过一个tuple和dict,你也可以调用该函数,所以对于任意函数,都可以通过类似
func(*args, **kw)
的形式调用它,无论它的参数是如何定义的.
参数部分易错点
Python的函数具有非常灵活的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数
默认参数一定要用不可变对象,如果是可变对象,运行会有逻辑错误!
- 要注意定义可变参数和关键字参数的语法: *args
是可变参数,args接收的是一个tuple **kw
是关键字参数,kw接收的是一个dict
- 以及调用函数时如何传入可变参数和关键字参数的语法:
可变参数既可以直接传入:func(1, 2, 3)
,又可以先组装list或tuple,再通过*args
传入:func(*(1, 2, 3))
关键字参数既可以直接传入:func(a=1, b=2)
,又可以先组装dict,再通过**kw
传入:func({**'a': 1, 'b': 2})
.
使用*args
和**kw
是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法.
尾递归优化
解决递归调用栈溢出的方法是通过尾递归优化,事实上尾递归和循环的效果是一样的,所以,把循环看成是一种特殊的尾递归函数也是可以的.
def fact(n): return fact_iter(n, 1)def fact_iter(num, product): if num == 1: return product return fact_iter(num - 1, num * product)>>> fact_iter(5, 1)>>> 120
可以看到,return fact_iter(num - 1, num * product)
仅返回递归函数本身,num - 1
和num * product
在函数调用前就会被计算,不影响函数调用。
尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。
遗憾的是,大多数编程语言没有针对尾递归做优化,Python解释器也没有做优化,所以,即使把上面的fact(n)函数改成尾递归方式,也会导致栈溢出.
学习资料Python 2.7教程 - 廖雪峰
- Python随学随记(1)
- Python随学随记(2)
- Python随学随记(3)
- Python随学随记(4)
- Python随学随记(5)
- Python随学随记(6)
- Python随学随记(7)
- Python随学随记(8)
- 本办法学Python 随记1
- 本办法学python 随记2
- Spring知识点 随学随记
- NSStirng和NSNumber随学随记
- java-随学随记之基础篇
- 随学随记之java的数据类型
- Python随记(二)字符串
- Python随记(三)字典
- Python 随记
- symbian 随记(1)
- python opencv(8)图像镜像
- 1-1-1html实例代码
- ubuntu14.04 caffe安装前先要将gcc版本降到4.7.x
- Linux --- 网卡配置问题
- Java Web
- Python随学随记(1)
- LeetCode-112:Path Sum
- Qt 的QString类的使用
- 会话(cookie session)
- PHP调用Jenkins接口的实现
- spark sql 入门详解
- LeetCode-111:Minimum Depth of Binary Tree
- PHP数组基本知识
- 将中缀表达式转化为后缀表达式