python3 条件语句,循环语句,迭代器,函数,作用域,模块,类,异常处理等

from typing import Iterable, Iterator, final

#=======================================================================================================
# Python 条件控制

# if 语句
# Python中if语句的一般形式如下所示:

# if condition_1:
#     statement_block_1
# elif condition_2:
#     statement_block_2
# else:
#     statement_block_3

if True:
    print("True")
else:
    print("False")

if not True:
    print("True")
else:
    print("False")

if 1 & 0 :
    print("1 & 0 is True")
else:
    print("1 & 0 is False")

x = 10 
if x < 0:
    print("x < 0")
elif x < 1:
    print("x < 1")
elif x < 2:
    print("x < 2")
elif x < 5:
    print("x < 5")
else:
    print("x > 5")


# if 嵌套
# 在嵌套 if 语句中,可以把 if...elif...else 结构放在另外一个 if...elif...else 结构中。

# if 表达式1:
#     语句
#     if 表达式2:
#         语句
#     elif 表达式3:
#         语句
#     else:
#         语句
# elif 表达式4:
#     语句
# else:
#     语句


if 1 > x:
    if x > 1:
        print("x > 1")
    elif x > 2:
        print("x > 2")
    else:
        print("x < 1")
elif 2 > x:
    print(" 21111")
else:
    print(" 1222")


#=======================================================================================================
# Python 循环语句

# while 循环
# Python 中 while 语句的一般形式:

# while 判断条件(condition):
#     执行语句(statements)……

while x >= 0:
    print("while x:", x)
    x -= 1

# while 循环使用 else 语句
# 在 while … else 在条件语句为 false 时执行 else 的语句块。
# 语法格式如下:
# while <expr>:
#     <statement(s)>
# else:
#     <additional_statement(s)>

x = 0
while x <= 10:
    print("while else x:", x)
    x += 1
else:
    print("x >= 10")


# for 语句
# Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串。
# for循环的一般格式如下:
# for <variable> in <sequence>:
#     <statements>
# else:
#     <statements>

for i in range(0, 10):
    print("for i:", i)
else:
    print("over range.")


for i in range(1, 100):
    if (i > 100):
        break
else:
    print("over range i:", i)


for i in range(1, 110):
    if (i < 100):
        continue
    else:
        print("i = ", i)
else:
    print(" for end i:", i)

# pass 语句
# Python pass是空语句,是为了保持程序结构的完整性。
# pass 不做任何事情,一般用做占位语句,如下实例

# 实例
# >>>while True:
# ...     pass  # 等待键盘中断 (Ctrl+C)

for i in 'abcdefgd':
    if i == 'd':
        pass
        print("pass here")
    print("i = ", i)
print("end")



#=======================================================================================================
# 迭代器
# from typing import Iterable, Iterator
# 迭代是Python最强大的功能之一,是访问集合元素的一种方式。
# 迭代器是一个可以记住遍历的位置的对象。
# 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
# 迭代器有两个基本的方法:iter() 和 next()。
# 字符串,列表或元组对象都可用于创建迭代器:
list = [0,1,2,3,4,5,6,7,8,9]
it = iter(list) #创建迭代器对象
print(next(it)) #输出迭代器的下一个元素
print(next(it))

# 注意:for 循环实际上创建了一个迭代器对象,并为每个循环执行 next() 方法。
for i in it:
    print(i, end=" ")
print("\n")


# 创建迭代器:
# 要把对象/类创建为迭代器,必须为对象实现 __iter__() 和 __next__() 方法。
# 正如在Python 类/对象 一章中学到的,所有类都有名为 __init__() 的函数,它允许您在创建对象时进行一些初始化。
# __iter__() 方法的作用相似,您可以执行操作(初始化等),但必须始终返回迭代器对象本身。
# __next__() 方法也允许您执行操作,并且必须返回序列中的下一个项目。

# 创建一个返回数字的迭代器,从 1 开始,每个序列将增加 1(返回 1、2、3、4、5 等):
class Xnumbers:
    def __iter__(self):
        self.a = 1
        return self
    def __next__(self):
        x = self.a
        self.a += 1
        return x

xnum = Xnumbers()
mIter = iter(xnum)

print(xnum.a) # 输出类的a的值
print(next(mIter))
print(next(mIter))
print(next(mIter))
print(next(mIter))
print(next(mIter))


#=======================================================================================================
# Python 函数
# 创建函数
# 在 Python 中,使用 def 关键字定义函数:
# return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。

def getmax(a, b):
    '''
    输入a,b返回最大的一个数
    '''
    if a > b:
        return a
    else:
        return b

print(id(getmax))
print(getmax.__doc__)
print(getmax(10, 33))
print(getmax(23, 20))
# print(getmax()) # 函数无默认参数,这里会报错

# 函数参数带默认参数值
def person(name='jim', age=20):
    print("name:",name)
    print("age:", age)
    return '------'
    pass


print(person())
print(person('Orange'))
print(person(age=11))
print(person('LiLei', 33))


# Python 作用域
# 局部作用域
# 在函数内部创建的变量属于该函数的局部作用域,并且只能在该函数内部使用。
# 在函数内部创建的变量在该函数内部可用:
def xfunc():
    x = 126
    print(x)

xfunc()


# 全局作用域
# 在 Python 代码主体中创建的变量是全局变量,属于全局作用域。
# 全局变量在任何范围(全局和局部)中可用。
gx = 12200
def gxfunc():
    print(gx)

gxfunc()
print(gx)


# Global 关键字
# 如果需要创建一个全局变量,但被卡在本地作用域内,则可以使用 global 关键字。
# global 关键字使变量成为全局变量。
def globalfunc():
    global gl_x
    gl_x = 3322



# 创建模块
# 如需创建模块,只需将所需代码保存在文件扩展名为 .py 的文件中:    
# 在名为 mymodule.py 的文件中保存代码:
# def greeting(name):
#   print("Hello, " + name)
# import mymodule
# mymodule.greeting("Python")
# 
# 注释:如果使用模块中的函数时,请使用以下语法:
# module_name.function_name
# 重命名模块
# 您可以在导入模块时使用 as 关键字创建别名:
# 为 mymodule 创建别名 md:
# import mymodule as md
#
# 模块中也可以包含python数据类型的属性
#


#=======================================================================================================
# Python 类/对象:
# Python 是一种面向对象的编程语言,拥有属性和方法。
# class 关键字 创建类:类(Class)类似对象构造函数。
class ClassA:
    x = 10

CA = ClassA()
print("class A x:", CA.x)


# __init__() 函数
# 上面的例子是最简单形式的类和对象,在实际应用程序中并不真正有用。
# 要理解类的含义,我们必须先了解内置的 __init__() 函数。
# 所有类都有一个名为 __init__() 的函数,它始终在启动类时执行。
# 使用 __init__() 函数将值赋给对象属性,或者在创建对象时需要执行的其他操作:
# 创建名为 Person 的类,使用 __init__() 函数为 name 和 age 赋值:
class Person1:
    def __init__(self, name, age):
        print("Person class init:")
        self.name = name
        self.age = age
    def func(self):
        print("Hello name is " + self.name)
    def set_name(self, name):
        self.name = name

p1 = Person1("GOOD", 83)
print(p1.name)
print(p1.age)
print(p1.func())

p1.set_name("Linux")
p1.func()

# del 删除类对象
del p1


# self 参数
# self 参数是对类的当前实例的引用,用于访问属于该类的变量。
# 它不必被命名为 self,您可以随意调用它,但它必须是类中任意函数的首个参数:
class Person2:
    def __init__(obj, name, age):
        obj.name = name
        obj.age = age
    def func(abc):
        print("World name is " + abc.name)

p2 = Person2("xiaojun", 22)
p2.func()


# pass 语句,只是占位没有实际功能:
# 类定义不能为空,但是如果处于某种原因写了无内容的类定义语句,可以用 pass 语句来避免错误。
class Person0:
    pass


# Python 继承
# 继承允许我们定义继承另一个类的所有方法和属性的类。
# 父类是继承的类,也称为基类。
# 子类是从另一个类继承的类,也称为派生类。
class Person:
    def __init__(self, name, age):
       self.name = name
       self.age = age
    def func(self):
        print("Person name is " + self.name)


class Student(Person):
    def __init__(self, name, age):
        Person.__init__(self, name, age) # 调用父类__init__方法
    def func(self): #子类重写父类方法
        print("Student name is " + self.name)
        Person.func(self) # 调用父类方法
    pass

s1 = Student("cat", 6)
print(s1.name)
print(s1.age)
s1.func()


# 使用 super() 函数
# Python 还有一个 super() 函数,它会使子类从其父继承所有方法和属性:
class Student1(Person):
    def __init__(self, name, age):
        super().__init__(name, age)
    def say(self):
        super(self)


dog =  Student1("dog", 102)
dog.func()
print(dog.name)
print(dog.age)


# python 异常处理
# try 块允许您测试代码块以查找错误。
# except 块允许您处理错误。
# finally 块允许您执行代码,无论 try 和 except 块的结果如何。

# try 块将生成异常,因为 h 未定义:
try:
    print(h)
except:
    print("An exception occurred")

# 多个异常
# 您可以根据需要定义任意数量的 exception 块,例如,假如您要为特殊类型的错误执行特殊代码块:
try:
    print(h)
except NameError:
    print("变量没定义")
except:
    print("其他错误")

# Else
# 如果没有引发错误,那么您可以使用 else 关键字来定义要执行的代码块:    
try:
    print("hello world")
except:
    print("有错误产生")
else:
    print("0 error, 0 warning")

# Finally
# 如果指定了 finally 块,则无论 try 块是否引发错误,都会执行 finally 块。
try:
    print("Hi python.")
except:
    print("有错误产生")
finally:
    print("finally ....")

# 引发异常
# 作为 Python 开发者,您可以选择在条件发生时抛出异常。
# 如需抛出(引发)异常,请使用 raise 关键词。
# raise 关键字用于引发异常。
x = 0 # -1 会Exception异常停止
if x < 0:
    raise Exception("Error x < 0")

s = 1 #"h" 会TypeError异常停止
if not type(s) is int:
    raise TypeError("Error s not int")

# With
# 基本思想是with所求值的对象必须有一个__enter__()方法和一个__exit__()方法。
class withdemo:
    def __enter__(self):
        print("In __enter__()")
        return "Python Withdemo."
    def __exit__(self, type, value, trace):
        print("In __exit__()")
    

def do_withdemo():
        return withdemo()

with do_withdemo() as wdemo:
    print("wdemo:", wdemo)
# 返回结果如下:
# In __enter__()
# wdemo: Python Withdemo.
# In __exit__()

with open("python_note.txt") as file:
    data = file.read()

猜你喜欢

转载自blog.csdn.net/u013420428/article/details/112285120