今日学习目标
1.三目运算
2.推导式
3.面向对象基础
一、三目运算
在Python中,三目运算符也称为条件表达式,其是一种简洁的方式来根据条件选择不同的值。三目运算符的语法格式如下:
结果1 if 条件 else 结果二
其表达的含义为如果条件成立则该表达式的值为结果1
,否则为结果2
,即如果条件为真则返回结果1
,否则返回结果2
。
请看一下示例:
x = 5
result = "Even" if x % 2 == 0 else "Odd"
print(result)
在上方代码中,使用三目运算符来判断变量 x
是否为偶数。如果 x
是偶数,条件 x % 2 == 0
将为真,因此返回值为 “Even”;否则,返回值为 “Odd”。
三目运算符是在一个表达式中完成条件判断和返回结果,可以使代码更简洁和易读。然而,在某些情况下,过多或复杂的条件可能会降低代码的可读性。因此,在使用三目运算符时,应注意保持代码简洁和易于理解。
三目运算符嵌套使用
三目运算符的嵌套使用,就是在多个条件下选择不同的值,如下:
x = 10
result = "Even" if x % 2 == 0 else ("Negative" if x < 0 else "Positive")
print(result) # 输出 "Even"
在上方代码中,根据变量 x
的值选择不同的结果。我们首先使用一个三目运算符来判断 x
是否为偶数。如果是偶数,则返回 “Even”。如果 x
不是偶数,我们再次嵌套使用三目运算符来判断它是否为负数。如果是负数,则返回 “Negative”。最后,如果既不是偶数也不是负数,我们选择返回 “Positive”。
需要注意的是,当使用嵌套三目运算符时,要确保代码能够保持清晰和易读。过多的嵌套可能会导致代码难以理解。在一些复杂的逻辑判断中,可能更合适使用传统的 if-else
语句来提高可读性和代码的可维护性。
二、推导式
在Python中,推导式(Comprehension)是一种简洁的创建序列(如列表、集合和字典)的方式,它允许我们在一行代码中生成新的序列。
常见的推导式有列表推导式、集合推导式和字典推导式。
2.1 列表推导式
列表推导式(List Comprehension):可以根据已有列表或其他可迭代对象中的元素,生成一个新的列表。列表推导式的语法是用方括号包围一个表达式,并在表达式前添加一个迭代器来遍历原始序列。
例如,使用列表推导式生成一个平方数列表:
numbers = [1, 2, 3, 4, 5]
squares = [x**2 for x in numbers]
print(squares) # 输出 [1, 4, 9, 16, 25]
2.2 集合推导式
集合推导式(Set Comprehension):和列表推导式类似,但是生成的是一个集合。
例如,使用集合推导式生成一个平方数集合:
numbers = [1, 2, 2, 3, 3, 4, 5]
squares = {x**2 for x in numbers}
print(squares) # 输出 {1, 4, 9, 16, 25}
2.3 字典推导式
字典推导式(Dictionary Comprehension):用于根据已有的键值对生成一个新的字典。字典推导式的语法是使用花括号包围一个键值对表达式,并在表达式前添加一个迭代器来遍历原始字典或其他可迭代对象。
例如,使用字典推导式生成一个字符串长度的字典:
words = ['apple', 'banana', 'cat', 'dog']
lengths = {word: len(word) for word in words}
print(lengths) # 输出 {'apple': 5, 'banana': 6, 'cat': 3, 'dog': 3}
推导式能够简化代码,并使代码更具可读性。但在使用推导式时,也要注意不要写过于复杂或难以理解的表达式,以确保代码的可维护性和可读性。
三、面向对象基础
面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,通过将数据和操作封装在对象中来组织代码。在面向对象编程中,对象是程序的基本单元,可以表示现实世界中的事物,并通过定义类来创建对象。
以下是面向对象编程的几个基本概念:
-
类(Class):类是一个抽象的概念,用于描述具有相同属性和行为的对象的集合。类是对象的模板,定义了对象的属性和方法。
-
对象(Object):对象是类的实例化,它是具体的、真实存在的实体。对象包含类定义的属性和方法,可以通过访问这些属性和调用这些方法来操作对象。
-
属性(Attribute):属性是对象的特征,用于描述对象的状态。它们存储的是对象的数据。类中的属性也称为实例变量。
-
方法(Method):方法是与对象相关联的操作或行为。方法是类中的函数,用于操作对象的属性或实现特定的功能。
-
封装(Encapsulation):封装是将数据和对数据的操作封装在对象中的机制。通过封装,对象的内部细节对外部是隐藏的,只能通过对象的公共接口来访问和操作。
-
继承(Inheritance):继承是一种通过创建新的类来扩展现有类的机制。派生类(子类)继承基类(父类)的属性和方法,可以在不修改基类的情况下添加新的功能。
-
多态(Polymorphism):多态允许使用同样的接口来处理不同类型的对象。它允许通过对象的具体类型来确定调用哪个实现。
面向对象编程的优点包括代码的可重用性、可维护性、可扩展性和灵活性。它提供了一种更抽象、更模块化的方式来组织和设计代码,使得代码更易于理解和修改。在面向对象编程中,重要的是合理地设计和定义类,以及正确地使用封装、继承和多态等概念来构建高质量的代码。
3.1 创建类
类的创建需要使用class
关键字来实现,例如创建一个名为MyClass
的类:
class MyClass:
x = 5
上方代码中创建了一个名为MyClass
类,在该类中存在着一个名为x
的类属性。**类属性就是在类的定义中直接声明的变量,并分配一个初始值。它们通常位于所有方法之外,位于类的顶部。类属性由所有该类的实例共享。这意味着,当一个实例修改类属性时,所有其他实例访问该属性时都会看到修改后的值。访问的时候可以通过类或者实例对象来进行访问。**如要在外部访问x,则通过如下代码实现:
print(MyClass.x)
通过类访问类属性的格式为类名.属性名
,点.
可白话翻译为的
,所以上方代码可白话翻译为:MyClass类的x属性
3.2 创建对象
在已有的类的基础上,可以通过MyClass()
格式来创建一个该类的对象。创建的对象能访问到类中的定义的属性。如下:
class MyClass:
x = 5
my_class = MyClass()
print(my_class.x)
上方代码通过类MyClass
创建了一个名为my_class
的对象,该对象能够访问到类中声明的属性。同3.1,对象访问属性可白话翻译为:对象my_class的x属性
3.3 方法
方法就是类中的函数,方法的创建需要注意参数的传递,如创建一个Person
类,并在类中定义一个myfunc
方法用于输出对象的姓名:
class Person:
name = 'xiaomei'
age = 18
def myfunc(self):
print("Hello my name is " + self.name + " and I'm " + str(self.age) + " years old.")
p1 = Person()
p1.myfunc()
在方法中,接收了一个self参数,该参数就是对当前类的当前实例的引用。用于访问该类中的属性 ,当然他的命名可以不用是self,但是必须是方法中的第一个参数。该方法同时也可称为实例方法,同理通过实例方法访问的属性可称为实例属性。
3.4 _init_() 方法
**init方法是每一个类中都有的一个方法(创建时没有写出仅仅是没有进行重写,相当于隐形了但不是不存在),该方法在类启动的时候执行。**使用init方法可以将值赋给实例属性,或者在创建对象的时候进行其他操作。例如:创建名为 Person 的类,使用 _init_() 函数为 name 和 age 赋值:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def myfunc(self):
print("Hello my name is " + self.name + " and I'm " + str(self.age) + " years old.")
p1 = Person("xiaomei", 18)
p1.myfunc()
对象的属性可以进行各自的增删改操作,其方式如下:
class Person:
name = 'xiaomei'
age = 18
def __init__(self, name, age):
self.name = name
self.age = age
def myfunc(self):
print("Hello my name is " + self.name + " and I'm " + str(self.age) + " years old.")
p1 = Person("xiaomei", 18)
p1.age = 20 # 修改对象属性
p1.myfunc()
del p1.age # 删除对象属性
p1.myfunc()
p1.sex = 'male' # 增加对象属性
print(p1.sex)
del p1 # 删除对象
print(p1)
输出结果如下:
第一次输出修改了实例属性age
的值为20
,然后删除对象属性之后再输出此时调用创建类时的类属性age
,所以输出中为18 years old.
;再添加了新属性sex
其值为male
,最后删除了p1
对象后再输出由于p1变量已经被删除所以抛出异常变量p1没有定义
。
结语
面向对象是一个相对较抽象的概念,是需要花费时间进行练习的内容,本篇文章中仅讲解了基本概念与基本应用,下篇文章中将对其三要素进行重点讲解。
思考:多次创建对象时这些对象都使用的是同一个类,那么是否意味着这些对象都是同一个呢?
练习:已知小红和小明二人都是高三毕业生,刚结束高考一月的二人决定参加兴趣班,小红平时喜欢羽毛球,小明喜欢电竞项目,请通过面向对象的思维来编写代码体现出二人在加入兴趣班后的基本个人介绍。输出格式如下:
My name is xxx.
I'm xxx years old.
xxx is my favorite sport.
目前还有未能成功配置环境的朋友请关注公众号或添加VX或直接私聊本人协助,可远程协助安装!!!!