Python基础(一)
目录
前言
Python与C++的一下区别
动态类型
input
循环判断语句格式
for循环
while循环
pass和break
函数以及函数参数
函数格式
函数可以有多个返回值
函数参数
类和对象
成员方法和成员变量
self和this指针
构造函数和析构函数
前言
由于煮波已经学过了C和C++,而且了解过java的语法,已经建立了语言的整体框架,所以学习python语法就不像学C++一样系统的一点一点的学习了,学习python语法,我就根据日常代码中遇到的或者是从C++代码中想到了在python中应该是什么场景来探讨python的相应知识;
Python与C++的一下区别
下面是借助AI工具先大致了解了下python和C++的语法语法上的一些区别;
Python和C++是两种编程语言,虽然它们都有一些共同的语法特性,但也存在一些显著的区别。
静态类型 vs 动态类型: C++是一种静态类型语言,需要在编译时声明变量的类型,并且在编译时会做类型检查。而Python是一种动态类型语言,变量的类型是在运行时确定的,不需要显式声明类型。这意味着在Python中可以更灵活地处理变量的类型,但可能会增加一些运行时的开销。
缩进 vs 花括号: Python使用缩进来表示代码块的结构,而C++使用花括号{}来定义代码块。这使得Python代码看起来更加简洁,但也需要注意缩进的正确性。C++的花括号可以更直观地显示代码块的开始和结束,但可能会使代码显得更加繁琐。
内存管理: 在C++中,程序员需要显式地进行内存管理,包括手动分配和释放内存。而Python有自动内存管理机制,使用垃圾回收器来处理内存管理,程序员不需要手动管理内存。这使得Python更容易编写和维护,但也可能带
这几天我正好也练习的也是这上述AI总结的三点,所以下面我就句几个实例帮助理解
动态类型
python在声明或定义变量时是不需要指明变量类型,而C++/C/Java这类语言是需要指明类型的;
a=123
b=2.5
print(type(a))#<class 'int'>
print(type(b))#<class 'float'>
变量是可以根据存储数据自动识别数据类型,这一点跟auto很像
input
a=input()
b=input()
c=input()
print(type(a))#<class 'str'>
print(type(b))#<class 'str'>
print(type(c))#<class 'str'>
input是内置函数,用于读取键盘输入的数据,但是需要注意的是input读取的数据一律按照字符串处理;
也就是我们如果使用了流提取(从键盘输入数据),那么变量存储的都是字符串;
如果我想输入存储一个整形数据怎么办呢?
---->类型强转,python中的强转格式是把要强转的数据用括号括起来;
a=int(input())
print(type(a))#<class 'int'>
print也是内置函数,用于打印数据到显示器上;与Java很像,输入完数据后默认都会自动回车;
我们可以自己调整参数控制是否自动回车;
print(1,end=" ")
print(2,end=" ")
print(3,end=" ")
#1 2 3
这是常用的输入和打印的格式上的不同
循环判断语句格式
在python中函数体是冒号(:)配合行缩进使用的;在同样的函行缩进数下,通常是同一个函数体;
for循环
for i in range (0,5,1):
print(i,end=" ")
#0 1 2 3 4
C++:for(int i=0;i<n;i++)
python:for i in range (begin,end;step)---end是取不到的,范围是[begin,end-1]
while循环
i=0
while i<5:
print(i,end=" ")
i=i+1
#0 1 2 3 4
pass和break
在python中,直接调整循环使用的还是break;这一点与C++时一样的;
i=0
while i<20:
print(i,end=" ")
i=i+1
if i==10:
break
#0 1 2 3 4 5 6 7 8 9
pass是C++中continue的效果,当然仍然可以使用continue,这是支持的
for i in range (0,10):
if i==5:
pass
else :print(i,end=" ")
#0 1 2 3 4 6 7 8 9
函数以及函数参数
函数格式
关键字def 声明为函数;
def add(a,b):
return a+b
ret=add(1,5)
print(ret)#6
函数可以有多个返回值
def add(a,b):
return a,b
x,y=add(1,5)
print(x,y)#1 5
如果函数有多个返回值,而你只想用其中的部分返回值,那么你就可以使用_来接收,
def add(a,b):
return a,b
_,x=add(1,5)
print(_,x)#1 5
但这并不意味着,_就是专门用来接受变量的,_其实也是一个变量名字,想想标识符的命名规则,他是不是也是符合的,我们不仅可以用'_',还可以用"__","___"等等等;这是这种命名方式通常没有命名含义,所以就拿来存储不关心的数据喽!
函数参数
1.有几个形参,传递几个实参
def add(a,b):
return a,b
2.形参使用参数列表 (*)
在形参上加上*,就是可变参数列表了
def f(*a):
n=len(a)
for i in range(n):
print(a[i],end=" ")
f(1,2,5,4,8)#1 2 5 4 8
类和对象
成员方法和成员变量
class node:
def __init__ (self,id,name,age):
self.id=id
self.name=name
self.age=age
def __del__ (self):
del self.id
del self.name
del self.age
def debug(self):
print(f"id: {self.id}\nname: {self.name}\nage: {self.age}")
类其实就是封装了的成员变量和成员方法,方法就是函数,我们知道了,但是成员变量该怎么声明呢?
python中类的成员变量是以参数的形式在构造函数中存在的;当然也可以使用缺省值
self和this指针
类中的方法,都要显式的带上参数self,self相当于是类本身地址,这一点类似于C++中的this指针,不过是隐式的,这里的self必须是手动添加的;---debug方法为例
class node:
def __init__ (self,id,name,age):
self.id=id
self.name=name
self.age=age
def __del__ (self):
del self.id
del self.name
del self.age
def debug(self):
print(f"id: {self.id}\nname: {self.name}\nage: {self.age}")
def fact(n):
if n==1 :return n
return fact(n-1)*n
#
person1=node(1,"小红",18)
person1.debug()
构造函数和析构函数
1.构造函数(__init__) ----这里的左右两边各两个_
构造函数的作用是初始化成员变量 ---这一点无需多言
2.析构函数(__del__)
引用计数-->引用计数为0-->释放内存
析构函数类似于智能指针shared_ptr的引用计数原理,当多个对象指向同一块内存的时候,采取了引用计数的机制,当引用计数为0 的时候就会释放掉该内存空间;
并不是简单的出了作用域就会自动调用析构函数,是引用计数为0,才会调用析构函数