Python语言基础(简单入门)

2024-05-07 17:36

本文主要是介绍Python语言基础(简单入门),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、Python是什么?

Python是一种高级、通用、解释型的编程语言,由Guido van Rossum于1991年创建。它以简洁、易读的语法和强大的功能而闻名,有以下特点:

  • 动态类型:Python是动态类型的语言,这意味着变量无需预先声明类型,并且在程序运行过程中类型可以改变。

  • 缩进风格:Python是缩进敏感的语言,代码块的开始和结束通过缩进来表示,而不是像其他语言那样使用大括号,所以缩进的空格数需要保持一致,一般为4个空格。

  • 面向对象:Python支持面向对象编程,可以创建类和对象,实现封装、继承和多态等特性。

  • 高级特性:Python具有许多高级特性,如列表解析、生成器表达式、装饰器等,可以简化代码并提高效率。

  • 模块化:Python支持模块化编程,可以将功能封装到模块中,方便代码重用和维护。

  • 开放源代码:Python属于开放源代码软件,可以免费获取和使用,同时拥有强大的社区支持和丰富的第三方库。

  • 跨平台:Python是跨平台的,可以在不同的操作系统上运行,具有良好的可移植性。

  • 解释性:Python是一种解释性语言,代码不需要预编译,可以直接运行在解释器上。

  • 丰富的库和工具:Python拥有大量的标准库和第三方库,涵盖了各种领域的功能,可以大大提高开发效率

二、Python的基本语法要点:

1、注释:用#符号表示注释,可以在代码中添加说明或注解

# 这是一个注释
print("Hello, World!")  # 这也是一个注释

2、变量:变量赋值非常简单,不需要显式声明类型,只需要直接给变量赋值即可

x = 10  # 整数
2y = "Hello, World!"  # 字符串
3z = [1, 2, 3]  # 列表

3、数据类型:常见的数据类型包括整数(int)、浮点数(float)、字符串(str)、布尔值(bool)、列表(list)、元组(tuple)、集合(set)、字典(dict)等。

x = 5           # int
y = 3.14        # float
z = "Hello"     # str
is_valid = True # bool
my_list = [1, 2, 3]  # list
my_tuple = (1, 2, 3) # tuple
my_set = {1, 2, 3}   # set
my_dict = {"name": "Alice", "age": 30} # dict

4、条件语句:Python使用关键字if、elif和else实现条件判断:

x = 5
if x > 0:print("x 是正数")
elif x == 0:print("x 是零")
else:print("x 是负数")

5、循环结构:主要有两种循环结构:for循环和while循环

  • for循环常用于遍历序列或其他可迭代对象:
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:print(fruit)

  • while循环基于条件重复执行一段代码:
count = 0
while count < 5:print(count)count += 1

6、函数定义:Python中定义函数使用def关键字:

特别提醒:在Python中,函数名前加单个下划线 _ 是一种命名约定,意味着这个函数主要是给内部使用的,对外部来说是“半私有”的。它不会阻止你访问或调用这个函数,但暗示着:“嘿,这个函数主要是给自己模块内部用的,外部最好别直接动它。”

def greet(name):print(f"Hello, {name}!")greet("Alice")  # 输出 "Hello, Alice!"

 7、模块导入:使用import关键字导入模块,以便使用其中的功能。

import math
print(math.pi)

8、 异常处理try-except-finally结构处理异常。

try:x = 1 / 0  # 除以零会引发ZeroDivisionError
except ZeroDivisionError:print("除数不能为零")
finally:print("无论是否出现异常,都会执行这部分代码")

三、Python中类的继承、封装和多态特性以及它们与Java和C++的不同之处:

Python类的继承、封装和多态等特性与Java和C++类似,但语法上更为简洁直观。

1、继承:

  • 继承是指一个类(称为子类或派生类)可以继承另一个类(称为父类或基类)的属性和方法。在Python中,可以通过在类定义时在括号中指定要继承的父类来实现继承。
  • 在Python中,类也可以多继承,即一个子类可以同时继承多个父类。这种多继承的特性在Java和C++中也存在,但在Python中更加灵活。
# 父类1
class Animal:def __init__(self, name):self.name = namedef make_sound(self):pass# 父类2
class Pet:def __init__(self, owner):self.owner = owner# 子类继承自父类1和父类2,实现多继承
class Dog(Animal, Pet):def make_sound(self):return "Woof!"# 实例化对象,传入不同参数
dog = Dog("Buddy", "Alice")# 输出对象的属性和方法
print(f"{dog.name} belongs to {dog.owner}")
print(f"{dog.name} says: {dog.make_sound()}")

2、封装:

Python并没有像Java或C++那样有严格的访问修饰符(public、private、protected),但是它提供了另一种形式的封装。在Python中,通常约定以单个下划线 _var 或双下划线 __var 开头的变量被视为非公开或者私有

  • 单下划线开头的变量或方法虽然不是真正的私有,但按照PEP8编码规范,这暗示着这是一个内部使用的变量或方法,外部应该尽量避免直接访问。
  • 双下划线 __var 会在运行时发生名称重整(name mangling),使得外部直接访问变得更加困难(变成 _ClassName__var 的形式),从而达到某种程度上的“私有化”。

尽管如此,Python的封装仍然是基于约定而非强制,任何内部属性都可以通过直接引用方式访问到。

为了更精确地控制属性访问,Python引入了属性描述符,允许程序员在访问属性时执行特定的操作(如读取、设置或删除属性时触发函数)。

class MyClass:def __init__(self):self._internal_value = None  # 私有变量@propertydef value(self):return self._internal_value@value.setterdef value(self, new_value):if isinstance(new_value, int):self._internal_value = new_valueelse:raise ValueError("Value must be an integer")# 使用
obj = MyClass()
obj.value = 42  # 通过属性描述符设置值
print(obj.value)  # 通过属性描述符获取值

例子中:第5行的@property装饰器将value方法转换为一个只读属性。这意味着当你尝试读取obj.value时,实际上会调用第7行定义的方法,而无需显式调用方法名(如obj.value())。第9行的@value.setter装饰器定义了一个设置器方法,当尝试给obj.value赋值时(如obj.value = 42),会调用这里的代码块。在这个例子中,它检查赋值的新值是否为整数,如果是,则更新内部的_internal_value,否则抛出错误。

3、多态:

多态意味着子类可以重写或扩展父类的方法,使得同一个接口可以有不同的实现。

  • 在Python中,多态是动态类型语言的特性,即对象的类型是在运行时确定的(即“如果它走起路来像鸭子,叫起来也像鸭子,那么它就是鸭子”),可以实现同一个方法在不同子类中有不同的实现。
  • Python的多态性是基于动态类型的,而Java和C++的多态是基于静态类型的。在Java和C++中,多态性通过继承和接口来实现,需要在编译时确定对象的类型。
# 多态示例
class Shape:def area(self):raise NotImplementedError("Subclasses should implement this!")class Square(Shape):def __init__(self, side):self.side = sidedef area(self):return self.side ** 2class Circle(Shape):def __init__(self, radius):self.radius = radiusdef area(self):import mathreturn math.pi * self.radius ** 2shapes = [Square(4), Circle(3)]
for shape in shapes:print(shape.area())  # 多态性:每个shape对象调用area方法时,会执行各自子类的实现

4、总结:

虽然Python、Java和C++都支持类的继承、封装和多态这些面向对象编程的特性,但它们之间在实现方式和特性上存在一些不同。Python作为一种动态类型语言,更加灵活和简洁,而Java和C++作为静态类型语言,在编译时类型检查更加严格。

这篇关于Python语言基础(简单入门)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/967937

相关文章

C语言的那些事儿之七

每日一结 深刻理解c中函数参数的传递   一:值传递 main()  {  int a = 4,b = 6;  Exchg1(a, b) /* 这里调用了 Exchg1 函数 */  printf("a = %d, b = %d.\n", a, b);  }    Exchg1(a, b)时所完成的操作代码如下所示。  int x = a; /* ← *

C语言的那些事儿之六

每日一结 ​ 注:不管是什么变量,归根结底,对内存的访问形式分为两类: 1.内存标识符: 通过对内存标识符的访问,实际上是访问内存标识符对应的内容 2.内存空间的地址: 在使用地址访问时,记得在地址前加上*,这表示通过地址去访问地址中相应的内容 3.在你不明白数据和地址在内存中的关系时,不妨画一张内存图

C语言的那些事儿之五

每日一结 1.指针:一个变量的地址   指针变量:专门用来存放变量地址的变量 ​   2.什么是空指针(NULL)         语言定义中说明, 每一种指针类型都有一个特殊值—— “空指针” ——它与同类型的其它所有指针值都不相同, 它“与任何对象或函数的指针值都不相等”。也就是说, 取地址操作符&永远也不能得到空指针,

C语言的那些事儿之四

每日一结 1.在switch-case语句中,若case和break中有多个语句,其之外可以不用花括号,语句之间分号即可。且switch()括号内不能是float类型的,再者,case和 : 之间必须要用空格,且case和 :之间的数必须是整型 ​   2.在do-while()循环中,while(

C语言的那些事儿之三

每日一结 1.对于异或,用于值交换的理解 今天在看C语言的位运算时,看到了如下交换a,b两值的方法:                     a = a^b;                     b = a^b;                     a = a^b; 后来想想,真是太神奇了!其实,我们首先知道,对于任意的

C语言的那些事儿之二

每日一结 1.查找一个数据类型占几个字节,可用sizeof(),具体用法见截图: ​ (注意:sizeof 可以测数据类型在内存空间所占的长度 ,若里面放的是变量,则是测这变量所占的内存空间的长度) 2.在bool类型中,非零为true,零为false,可参照截图: 4.正数的反码,补

C语言的那些事儿之一

每天一结 1.怎么快速切换电脑的界面? 按一下Alt+Tab键是最近用到的两个程序间的切换。如果要在一个程序下实现两个窗口间切换的话,可以按Ctrl+Tab键 2.在linux中,如果你想要实现某种操作,但不知道该用什么命令,除了谷歌百度,就没有其他办法了 3.主目录是指在你打开linux操作系统终端时,最先出现的那个目录就是主目录,这个主目录是可以设置的 4.查找当前目录的

C语言试卷习题

C语言试卷题     ​         二.程序题 1.冒泡排序 答案:略...     2.编写strcpy函数 已知strcpy函数的原型是char *strcpy(char *strDest ,const *strSrc); strD

C语言的那些事儿之八

每日一结 递归函数: 找出fac.c这个函数的问题 递归函数的例题:     结构体: 注: I.在定义结构体时,花括号后面的分号一定不能省! II.因为 -> 运算符的优先级高于 & ,所以&(p -> id)可以写成 &p -> id III.结构体记得在其外部定义,结构体其实说白

读《C语言陷阱与缺陷》一书后的一些注意事项

1.一般而言,赋值运算相对于比较运算出现得更频繁,因此字符数较少的符号=就被赋予了更常用的含义——赋值操作 2.' '不等于零(' '的ASCII码值为32) 3.需要注意的是,除了字符串与字符常量,符号的中间不能嵌有空白(空格符,制表符和换行符)。例如,如果/是为了判断下一个符号而读入的第一个字符,而/之后紧接着* , 那么无论上下文如何,这两个字符都将被当做一个符号 而实