- python 代码头两行注释
很多时候,我们在一些py脚本文件的开头都能看到类似的以#开头的这样两行代码,它们不是注释,是一些设定
#!/usr/bin/env
# -*- coding:utf-8 -*-
第一行,用于执行运行该脚本需要的python解释器版本,至少专门在 linux环境下起作用,windows不需要,env方式下系统会自动使用环境变量中的设置的python解释器。还有一种形式,#!/usr/bin/python3.6 这样方式的注释会强制要求系统使用python3.6的解释器来执行该 py 文件,这种方式下,一旦你本地的python3.6 版本删除了,会出现找不到解释器的错误,以上两种方式都是指在linux环境下使用 ./test.py 这种方式来执行脚本时的设置,但是如果在linux环境下使用 python test.py &
python3 test.py 这种方式来执行 py 文件时,这一行设置就不起作用了;
第二行,用于设置程序本身的字符编码,在python3 中已经全面支持unicode 默认是 UTF-8 的编码,所以我们不用在纠结乱码,所以在python3中,这行设置是不起作用的,但是在python2环境中还是有设置的必要的;
- 多行语句,当一条语句太长时,可以使用\ (反斜线)实现换行
st = "abc" \
"def" \
"ghi" \
" OK "
print(st)
>>>abcdefghi OK
使用回车 enter 就可以换行
- 转义字符 \
转义符 ‘\‘,用来特殊转义,例如\r\n,\\。它可以将引号转义为单纯的引号,没有任何作用的引号。
原生字符串: 通过在字符串前加r或R,如 r"this is a line with \n",表示这个字符串里的斜杠不需要转义,等同于自身。因此,例子中的\n会显示出来,并不是换行。
unicode字符串:加前缀u或U, 如 u"this is an unicode string"。
bytes类型:加前缀b,如b”this is a bytes data”。但是s=b“中文”,这种是不行的!
- 如何阅读错误调用栈信息
以下面的代码为例:
def foo(s): #1
return 10 / int(s) #2
#3
def bar(s): #4
return foo(s) * 2 #5
#6
def main(): #7
bar('0') #8
#9
main() #10
运行代码后,会弹出如下的错误:
Traceback (most recent call last):
File "F:/Python/pycharm/201705/1.py", line 10, in <module>
main()
File "F:/Python/pycharm/201705/1.py", line 8, in main
bar('0')
File "F:/Python/pycharm/201705/1.py", line 5, in bar
return foo(s) * 2
File "F:/Python/pycharm/201705/1.py", line 2, in foo
return 10 / int(s)
ZeroDivisionError: division by zero
这些信息就是错误提示。我们需要从上往下读,英文看起来很复杂,其实很易懂。Traceback...表示追踪错误开始,说在某个位置的1.py文件的第10行中的main这个函数出了问题。那么问题出在哪呢?是1.py文件中的第8行的bar函数调用出了问题,那么出什么问题呢?还没找到根子,又说在第5行,第2行调用出了问题,然后最终发现是return 10 / int(s)
这行语句的问题。问题是什么,发生了除零错误!ZeroDivisionError是一个除零异常。到这里,我们恍然大悟,我让10除0了,所以出现错误了,那么就知道怎么改了。其实查找错误,排除错误就是这么简单,只是需要你耐心的一行行地查看错误调用栈,再根据最后的错误类型,就可以判断错误的发生原因并修改错误,没有想象中的那么复杂
- 常量与变量
变量:在程序运行过程中,值会发生变化的量
常量:在程序运行过程中,值不会发生变化的量
无论是变量还是常量,在创建时都会在内存中开辟一块空间,用于保存它的值
每个变量在使用前都必须赋值,变量赋值以后才会被创建,新的变量通过赋值的动作,创建并开辟内存空间,保存值。如果没有赋值而直接使用会抛出赋值前引用的异常或者未命名异常。
Python中,一切事物都是对象,变量引用的是对象或者说引用对象在内存中的地址
Python中,变量本身没有数据类型的概念,通常所说的“变量类型”是变量所引用的对象的类型,或者说是变量的值的类型。因为变量指向了这个带类型的对象,所有变量也有了类型;
如何理解变量在计算机内存中的表示呢,当我们创建了一个变量a = 'ABC'时,Python解释器干了两件事情:
1.在内存中创建了一个‘ABC’的字符串对象;
2.在内存中创建了一个名为a的变量,并把它指向'ABC'。
也可以把一个变量a赋值给另一个变量b,这个操作实际上是将变量b指向变量a所指向的对象,
常量就是不变的变量,比如常用的数学常数圆周率就是一个常量。在Python中,通常用全部大写的变量名表示常量:
PI = 3.14159265359
常量通常放置在代码的最上部,并作为全局使用
- python 运算符——算术运算符
Python中,有3种除法;
(1)一种除法是 / ,/ 除法计算结果是浮点数,即使是两个整数恰好整除,结果也是浮点数;
>>> 9 / 3
3.0
(2)还有一种除法是//,也称为地板除,只取整数部分,余数被抛弃;
>>> 10 // 3
3
(3)Python还提供一个余数运算,可以得到两个整数相除的余数;
>>> 10 % 3
1
- python 运算符——比较运算符
以下假设 a=10 ,b=20
- python运算符——赋值运算符
以下假设 a=10 ,b=20
- python运算符——逻辑运算符
Python语言支持逻辑运算符,使用更加人性化的英文单词and or not
(全部都是小写字母)。以下假设变量 a 为 10, b为 20
- python运算符——成员运算符
in 与 not in
是Python独有的运算符(全部都是小写字母),用于判断对象是否某个集合的元素之一,非常好用,并且运行速度很快。返回的结果是布尔值类型的True或者False。
- python运算符——身份运算符 (全部都是小写字母)
注意is
与比较运算符“==”的区别,两者有根本上的区别,切记不可混用,区别如下:
is用于判断两个变量的引用是否为同一个对象,用来判断两个对象的内存地址是否相同;
而==用于判断变量引用的对象的值是否相等;
python内置函数:id()
,用它可以查看某个变量或者对象的内存地址,两个相同内存地址的对象被认为是同一个对象。
- python输入 与 输出
- input输入函数
input输入函数,获取用户输入,保存成一个字符串。input函数的返回值是一个字符串类型。哪怕你输入的是个数字1,返回给你的只会是字符串“1”,而不是 整数1。
我们不难发现,input函数将我们的输入原样不动的返回给了我们,并包装成一个字符串。这肯定是不行的,会带来很多问题,所以通常我们都需要对用户输入进行处理和判定;
(1)比如对空输入进行处理:
inp = input("请输入你的姓名: ")
if inp == "":
inp = input("姓名不能为空,请重新输入: ")
(2)比如将字符串转换成数字类型:
age = input("请输入你的年龄: ")
age = int(age) # 将字符串转化为整数
if age > 18:
print("已经成年")
else:
print("还是未成年")
(3)去除开头的空白lstrip,去除结尾的空白rstrip以及去除两端的空白strip
inp = input("请输入你的姓名: ")
inp = inp.strip() # strip的用法在字符串数据类型有讲述
print(inp)
(4)判断输入的字符类型
我们在将字符串转化为整数用的是int()函数,这种方式有危险的,对于形如“123”, “283242”的字符串,转化没问题,但是对于包含字符、特殊字符的字符串就没办法转化了,会弹出异常错误。所以在使用int函数之前,要先对输入进行判断
age = input("请输入你的年龄: ")
if age.isdigit(): # 使用isdigit函数判断输入是否全是数字格式
age = int(age) # 将字符串转化为整数
print("你的年龄是: ", age)
else:
print("输入不合法!")
- print输入函数
print函数用于将内容格式化显示在标准输出上,主要指的是屏幕显示器。
print可以接受多个字符串,每个字符串用逗号“,”隔开,连成一串输出。print会依次打印每个字符串,同时,每遇到一个逗号“,”就输出一个空格。
>>> a='seleniu'
>>> b='appium'
>>> print(a,b)
seleniu appium
print函数的原型:print(self, *args, sep=' ', end='\n', file=None)
sep参数: 分隔的符号,默认是一个空格;
end参数: 打印后的结束方式,默认为换行符\n
。如果,设置end=''
,则可以不换行,让print在一行内连续打印
- print 格式化输出
>>> print ("我叫 %s 今年 %d 岁!" % ('小明', 10))
我叫 小明 今年 10 岁!
>>> print('我叫{}今年{}岁'.format('小明',10))
我叫小明今年10岁
>>>