Python 关键字

1、if、elif、else

条件判断语句,例如:

num = 5
if num < 0:
    print("num小于0")
elif num == 0:
    print("num等于0")
else:
    print("num大于0")
num大于0

2、True、False

布尔类型,True表示真,False表示假,例如:

if True:
    print("True!")
True!

3、None

Python中,一切皆可看作对象,“None”表示一个“空对象”,它不同于“NULL”,比如说当“None”作为判断语句的条件时,永远返回False,例如:

if None:
    print("我永远不会输出!")

4、and、or、not

其一:x or y 的值只可能是x或y; x为真,输出x ; x为假,输出y,例如:

print(1 or 0)
print(0 or 1)
1
1

其二:x and y 的值只可能是x或y;x为真,输出y;x为假,输出x,例如:

print(1 and 0)
print(0 and 1)
0
0

其三:在不加括号时,and 优先级大于 or,例如:

print(0 or 1 and 2)
2

注:在Python中,空字符串为假,非空字符串为真,非零的数为真,例如:

print('' or 1)
1

其四:not关键字表示取反的意思,例如:

print(not True)
print(not 0)
False
True

5、pass

pass关键字的主要作用就是占据位置,让代码整体完整,比如说如果一个if条件语句中的内容还没有想好,可以先用pass填坑,例如:

if True:
    pass

6、class

class关键字表示定义一个类,class之后紧跟着类名,类名加括号表示该类的一个对象,例如:

class A:
    pass
a = A()
print(type(a))
<class '__main__.A'>

其中,a为类A()的一个对象

7、def、return

def关键字表示定义一个函数,def之后紧跟函数名,括号内部为函数的参数,不管有没有参数,括号都是不可省略的,函数中包含return返回值,若省略,则返回默认空值,例如:

def sum(x, y):
    return x + y

print(sum(1, 2))
3

8、try、except、finally

对于异常处理,可以用此类关键字操作。try中的代码在执行过程中若出现错误,便会执行except中的代码,否则,except中的代码不执行,但不论有没有错误,finally中的语句都会执行,例如:

def f():
    try:
        print(1 / 0)
    except:
        print('2')
    finally:
        print('3')
        return '3'

print(f())
2
3
3

从上面这个例子中可以看到,函数f()的返回值return语句放在了finally中,当然也可以放在其他地方,例如:

def f():
    try:
        print('1')
        return '1'
    except:
        print('2')
        return '2'
    finally:
        print('3')
        return '3'

print(f())
1
3
3

上面这个例子中,try、except和finally模块中都有return语句。此时,就会出现一个问题,到底会返回哪个值呢?

也许你猜对了!当然是finally中的return,具体原因为:首先执行try中的代码,此时return返回'1',由于没有报错,所以except并不执行,但是finally一定会执行,而且finally中也有return语句,执行到该return时,'3'会覆盖'1',所以最后返回的仍然是'3'

除此之外,有时候也会用到else语句,例如:

def f():
    try:
        print('1')
    except:
        return '2'
    else:
        print('3')
    finally:
        print('4')
        return '4'

print(f())
1
3
4
4

else语句存在的前提条件是try中没有return语句,否则else中的语句永远不会被执行。

此时,首先执行try,然后执行else,最后执行finally。

9、with、as

其一:with语句是什么?

    有一些任务,可能事先需要设置,事后做清理工作。对于这种场景,Python的with语句提供了一种非常方便的处理方式。

    一个很好的例子是文件处理,你需要获取一个文件句柄,从文件中读取数据,然后关闭文件句柄。

    首先,在.py文件的同级目录下创建一个hello.txt的文档,该文档中的语句为:Hello World!

    (一)不用with语句,例如:

 
file = open("./hello.txt")
data = file.read()
file.close()
print(data)
Hello World!

    这样,就会出现两个问题。一,可能忘记关闭文件句柄;二,文件读取数据可能发生异常,没有进行任何处理。下面是处理异常的加强版本:

file = open("./hello.txt")
try:
    data = file.read()
finally:
    file.close()
print(data)
Hello World!

    虽然这段代码可以解决异常处理,但是太冗长了。这时候就需要用到with来进行处理,例如:

with open("./hello.txt") as file:
    data = file.read()
print(data)
Hello World!

其二:with如何工作?

    基本思想:with所求值得对象必须有一个_enter_()方法和一个_exit()_方法

    执行流程:with后面的语句先执行,返回对象的_enter_()方法被调用,这个方法的返回值将被赋值给as后面的变量,然后执行:后面的语句,最后将调用前面返回对象的_exit_()方法

    举个例子:

class Sample:
    def __enter__(self):
        print("In _enter_()")
        return "Foo"

    def __exit__(self, exc_type, exc_val, exc_tb):
        print("In _exit_()")

def get_sample():
    return Sample()

with get_sample() as sample:
    print("sample:", sample)
In _enter_()
sample: Foo
In _exit_()

    正如你所看到的,

    1.  _enter_()方法被执行

    2.  _enter_()方法返回的值"Foo"被赋值给sample

    3. 执行:后面的代码

    4. _exit_()方法被执行

其三:with最大的优点在于它可以处理异常。在如上所示的代码中,_enter_()方法和_exit_()方法都有一定的参数,这些参数在处理异常时相当有用,例如:

class Sample:
    def __enter__(self):
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        print("self:", self)
        print("exc_type", exc_type)
        print("exc_val", exc_val)
        print("exc_tb", exc_tb)

    def do_something(self):
        bar = 1 / 0
        return bar + 10

with Sample() as sample:
    sample.do_something()
Traceback (most recent call last):
self: <__main__.Sample object at 0x000000000278ECF8>
exc_type <class 'ZeroDivisionError'>
exc_val division by zero
  File "D:/WorkPlace/Python/test/hello.py", line 319, in <module>
exc_tb <traceback object at 0x00000000027A7588>
    sample.do_something()
  File "D:/WorkPlace/Python/test/hello.py", line 315, in do_something
    bar = 1 / 0
ZeroDivisionError: division by zero

    实际上,在with后面的代码块抛出任何异常时,_exit_()方法都会被执行。正如上例所示,异常抛出时,与之关联的exc_type、exc_val和exc_tb传给_exit_()方法,因此抛出的ZeroDivisionError异常被打印出来了。

    类似,在开发库时,清理资源、关闭文件等操作都可以放在_exit_()方法中

    因此,Python的with语句是提供一个有效的机制,让代码更简练,同时在异常产生时,处理工作更简单。

10、for、in

for循环可以遍历任何序列的项目,如一个列表或者一个字符串,例如:

str = "Hello World!"
lis = [1, 2, 3, 4, 5]
for s in str:
    print(s, end=',')

for index in range(len(lis)):
    print(lis[index], end=',')
else:
    print("已全部输出!")
H,e,l,l,o, ,W,o,r,l,d,!,1,2,3,4,5,已全部输出!

print中的end=','表示输出在一行上,且以','进行分割

第二个for循环是通过序列索引进行迭代,其中,len()和range()为内置函数,len()返回列表的长度,range()返回一个序列的数

第二个for循环后面加上else,表示执行完for循环后执行else中的语句

in除了用于for循环中,还可用于判断某一元素是否在序列中,例如:

print(1 in range(10))
True

11、while

while用于循环执行程序,即在某条件下,循环执行某段程序,当条件不满足时,退出循环,例如:

count = 0
while count < 5:
    print("count is:", count)
    count += 1
count is: 0
count is: 1
count is: 2
count is: 3
count is: 4
同样,while循环中也可以使用else语句,同for中的else

12、break、continue

break关键字用于退出整个循环,continue关键字用于退出本次循环,例如:

str = "hello"
for x in str:
    if x == 'e':
        break
    print(x)
print('---')
for x in str:
    if x == 'l':
        continue
    print(x)
h
---
h
e
o

13、assert

assert关键字,即断言,判断后面的condition真假,若condition为false,就会返回一个AssertionError出来,例如:

assert 1 == 1
assert 1 == 0
AssertionError

为assert断言语句添加异常参数,就是在断言表达式后添加字符串信息,用来解释断言并更好的知道是哪里出了问题,例如:

str = "hello"
assert len(str) >= 6, '字符串长度小于6'
AssertionError: 字符串长度小于6

注意,断言语句与异常参数之间用','隔开

14、del

del关键字作用在变量上,而不是数据值上。由于Python都是引用,而Python有GC机制,所以,del所删除的是数据的引用,而不是数据值,例如:

a = 1
b = a
c = a
del a
del b
print("c:", c)
c: 1

15、import、from

import和from关键字都可用于导入某个模块,import可导入整个模块,而from可导入某个模块中的某个方法,例如:

import math

print(math.pi)
3.141592653589793
from math import pi

print(pi)
3.141592653589793

后续持续更新中...

16、global、nonlocal

首先,你要了解LEGB规则

在Python中,当引用一个变量的时候,对这个变量的搜索是按照局部作用域(Local)、闭包函数外中的函数中(Enclosing)、全局作用域(Global)、内建作用域(Built-in)的规则查找的,在局部找不到,便会去局部外的局部找,再找不到就会去全局找,再者去内建中找

例如:

x = int(1.5) # 内建作用域
y = 2 # 全局作用域
def outer():
    a = 3 # 闭包函数外的函数中
    def inner():
        d = 4 # 局部作用域

然而,当在一个函数内部为一个变量赋值时,并不是按照上面所说的LEGB规则来首先找到变量,之后为该变量赋值。有这样一条规则:“当在函数中给一个变量名赋值时(而不是在一个表达式中对其进行引用),Python总是创建或改变本地作用域的变量名。除非它已经在那个函数中被声明为全局变量."

看如下例子:

x = 1
def outer():
    x = 2
outer()
print(x)
1
上面的例子中,因为outer函数中没有变量x,因此Python会在outer函数的本地作用域创建一个变量x,也就是说此x并非x=1中的x,而print输出的是全局变量x

当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了

修改全局变量,例如:

x = int(1.5) # 内建作用域
y = 2 # 全局作用域
def outer():
    global x, y
    x = 3
    y = 3

outer()
print("x:", x)
print("y:", y)
x: 3
y: 3

修改嵌套作用域(enclosing作用域,外层非全局作用域)中的变量则需要nonlocal关键字了,例如:

def outer():
    a = 3 # 闭包函数外的函数中
    def inner():
        b = 4 # 局部作用域
        nonlocal a
        a = 4
    inner()
    return a
print("a:", outer())
a: 4

17、is

在Python中,会用到两个对象的比较,可以用is,也可以用==,它们之间的区别是:

    is 比较的是两个对象是不是完全相同,它们是不是同一个对象,占用的内存地址是否相同

    == 比较的是两个对象的内容是否相等,即内存地址可以不一样,内容一样就行了

例如:

a = 1
b = a # 通过引用赋值,赋值的都是引用
print("a id:", id(a), "\nb id:", id(b))
print("a is b:", a is b)
print("a == b:", a == b)

c = ["c","d"]
d = c[:] # 通过切片赋值
print("c id:", id(c), "\nd id:", id(d))
print("c is d:", c is d)
print("c == d:", c == d)
a id: 8791443841136 
b id: 8791443841136
a is b: True
a == b: True
c id: 5923464 
d id: 5923528
c is d: False
c == d: True

注意:小整数对象[-5,256]在全局解释器范围内被放入缓存供重复使用,而其他整数对象用is比较时会出现相反的结果,而在P有charm或者保存为文件执行,结果仍然相同,这是因为解释器做了一部分优化,例如:

>>> a = 1
>>> b = 1
>>> a is b
True
>>> a = 257
>>> b = 257
>>> a is b
False

以上试例为在cmd命令窗口中

注意:is运算符比==效率高,因为is不能被重载,不用进行特殊的函数调用,少了函数调用的开销而直接比较两个整数id,而a==b则是等同于a._eq_(b)

注意:在变量和None进行比较时,应该使用is

18、raise

当程序出现错误,Python会自动引发异常,也可以通过raise显示地引发异常

一旦执行了raise语句,raise后面的语句将不能执行,例如:

s = None
if s is None:
    raise NameError
print("is here?")
raise NameError

但是在try、except中仍可以捕获该异常,例如:

try:
    s = None
    if s is None:
        raise NameError
except:
    print("空对象没有长度")
空对象没有长度

19、lambda

Python使用lambda来创建匿名函数

所谓匿名,意即不再使用def语句这样标准的形式定义一个函数,例如:

sum = lambda a, b: a + b
print(type(sum))
print(sum(1, 2))

# 等同于
def sum(a, b):
    return a + b
print(type(sum))
print(sum(1, 2))

<class 'function'>
3
<class 'function'>
3

20、yield

在Python中,使用了yield的函数被称为生成器

跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作

在调用生成器运行的过程中,每次遇到yield时函数会暂停并保存当前所有的运行信息,返回yield的值,并在下一次执行next()方法时从当前位置继续运行

以下实例使用yield实现斐波那契数列:

import sys

def fibonacci(n):
    a, b, counter = 0, 1, 0
    while True:
        if (counter > n):
            return
        yield a
        a, b = b, a + b
        counter += 1

f = fibonacci(10)

while True:
    try:
        print(next(f), end=' ')
    except StopIteration:
        sys.exit()
0 1 1 2 3 5 8 13 21 34 55 

如有疑问,可随时与楼主联系

期待您的指教!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值