上节课的知识复习与补充
-
pip一定要用在windows的命令提示符里,因为它实际上是个命令
-
安装pip如果遇到了网速过慢的问题可以换个镜像,比如清华的
-
上节课还讲了对象以及对象在内存中的地址,要分清对象以及引用对象的变量。两者存在于内存中不同位置,通过指针指向建立联系。上节课的x+6就是在内存中重新开辟了一块地址,把9重新放进去,然后把x指向9。这是因为python采用了基于值的内存管理方式,如果多个变量为同一个值(前提是这个值要是简单的值),内存中只存一份,然后可以把多个变量指向它
-
变量名命名时最好不要用下划线开头。因为它有特殊的意义,(如_ builtins _)这是python内置 ,自带的一个变量名,前后两个下划线提示这是python内置的变量名以起警示作用
数字
-
python支持复数运算,可用.imag和.real分别获取复数虚部和实部
-
0x表示16进制,0o表示八进制,0b表示二进制
字符串
字符串可以通过下标索引方式读取值,但是不能用这种方式来改变它的值
例:
>>>s='abc'
>>>s[0]
'a'
>>>s[0]='A' 这会出错
- 字符串格式化自己看,转义字符也和其他语言差不多。他直接跳过不讲了
操作符和表达式
x//y求整商
python2和python3关于除法的区别:
python2:3/5得到0 3.0/5得到0.6(转换为float类型)
python3:3//5得到0 3/5得到0.6
有什么方法阻止python2这种莫名其妙的除法?
>>>from_future_import divison
从furture这个package里去import division这个东西以强制用版本3的divison
>>>3/5
0.6
>>>_
python中的’,’
例:
>>>'a' in 'b','a' in是一个集合里的元素判断
(False,'a') 第一个运算的结果作为tuple的第一部分,可以说逗号用于产生tuple
>>>c='a'in'b','a'
>>>c
(False,'a')
>>>type(c)
<class 'tuple'>
>>>('a','b')
('a','b')
>>>'a','b'
('a','b') 括号其实可有可无,逗号才是关键
>>>('a',)
('a',) 元组里只有一个元素时要加逗号结尾
内置函数
不需要导入即可使用,用>>>dir(_ builtins _)查看。2和3内置函数略有不同
以下为上课提到的几个内置函数,以后也会讲到。
eval()
ord(),chr()
ord()返回unicode代码,而且英文字符和ascii码一样),这两个实际上是相反的操作
map()
python2:map里接受的第一个参数是一个函数的名字(如math.sin)。作用在后面那个列表上每个元素上,得出的结果是一个列表。map把第一个参数指定的方法(这个方法可以是你自己定义的)依次作用到第二个参数序列里面的每一个元素上,结果组装成一个列表并返回
python3:直接print看不到结果的结果,执行map后返回一个map对象(一个可迭代对象)。要转换一下 才能查看结果(如print(list(a))
列表推导式
有for循环的表达式并放在一个方括号里,这叫列表推导式。如a>>> = [random.randint(1,100) for i in range(10)]就是一个常见的列表推导式。range(10)生成0到9一共10个这个range里的连续整型数。for对0到9做一个循环,每循环一次把数赋给i。这里for循环执行10次,每次执行random.randint(1,100)产生1到100里的一个随机整数,总的结果是产生10个随机整数并放在一个列表里。
什么是可迭代对象?
例:
>>>a=[1,2,3]
>>>aa=iter(a) iteration=迭代器,把一个序列a通过iter函数返回一个a的可迭代对象
>>>type(aa)
<type'listitrator'>
>>>aa.next()
1
>>>aa.next()
2
>>>aa.next()
3
>>>aa.next()
........
stoplteration
>>>_
有类似行为特征的即为可迭代对象,python3大量采用了这种方式以提升性能
对象的删除:del
基本输入输出
一般格式:x=input(‘提示信息:’)
python2与python3在输入输出上的不同
输入函数种类不同:
python2:raw_input/input
python3:全部把接收的东西转换为str,没有raw_input。想要别的类型要自己转化,
如加上>>>int(x)把输入的x转换为整数
输出方式的不同:
python2:print语句 python3:print()函数
重定向方式的不同
加上逗号表示输出内容不换行的不同
模块(moduel)
python脚本的__name__属性
python脚本在运行时,解释器都会给一个名为name的属性自动赋值。脚本作为模块被导入(import)和独立运行时_ name _的值不同。不严谨的说 _ name _ 属性的用法有点类似于C语言中用于定义程序的入口的main()函数。python虽然没有这东西,但是python可以用一些技巧给这个程序在执行的时候预留一个入口。写程序时最好先把if _ name _ ==’ _ main _’: 写了,把其他函数的定义写在if _ name _ ==’ _ main _ ‘: 语句的外面。脚本被别人import使用时if _ name _ ==’ _ main _ ': 语句内部内容不会被执行,但是已经可以调用脚本里面的函数,因为已经生成了函数对象,只是老师在演示时没有调用这些函数而已。
例: name_test1.py文件为例,文件里代码为print(__name__)。先打开命令提示符并切到
文件所在目录
作为模块(modeul)被导入(import)时:
c:\users\gli\aptana workspace\chapter1>python
.......
>>>import name_test1
name_test1
>>>_
当作一个独立程序(脚本script file或者源程序source code file)被python解释器运行:
c:\users\gli\aptana workspace\chapter1>python name_test1.py
__main__
>>>_
注:这里python作为一个命令,name_test1文件名是它的参数,运行名为python的应用程序
(其实就是解释器)。解释器解释运行作为一个整体的name_test1
python可以通过name属性值来控制程序的运行方式
例:
def foo():
print(__name__) 上半部分为函数的定义
if __name__=='__main__':
print('Please use this as a moduel')
foo()
函数的调用,第三方import的时候执行foo()函数的定义,但不会因为if __name__=='__main__':而被主动调用。(因为此时_name_属性并不是'_main_'而是name_test1)。利用这个特性,开发者开发那些以后会被别人引用的模块的时候可以把一些测试的东西写在if语句后面
补充:把上述代码存储为test.py并运行上述代码
c:\users\gli\aptana workspace\chapter1>python
......
>>>import test (导入时不加.py)
>>>test.foo() 使用模块内的函数
test
c:\users\gli\aptana workspace\chapter1>python test.py
Please use this as a moduel
_main_
代码规范:pep8
缩进
- 4个空格为基本缩进单位
变量名
- 大小写命名的区别具体见课件
注释
-
python2在注释时有中文要加上coding的声明:# - * - coding: utf-8 - * -,python3则不用
-
sys.version_info.major>2用于判断版本号
*python cheat sheet稍微提了下,并没有讲什么东西
编辑于2020-2-26 8:35
修改于2020-4-26 11:18