前言
在上一讲 python零基础入门 (2)-- 从Hello World开始 中我们已经成功创建了自己的第一个python程序,打印出了那句经典的Hello World,这一讲我们将继续基础知识的学习,了解python的语法特点。
python语法简介
首先,python的语法跟c语言有有一些明显的区别:
1. 语法结构
C语言使用分号(;)作为语句的结束符,而Python使用换行和缩进(通常是4个空格)来表示代码块的开始和结束。Python强制要求使用一致的缩进,而C语言对缩进没有强制要求。
比如一个简单的轮询算法, c语言的写法是这样的:
#include <stdlib.h>
#define I_MAX 3u
#define J_MAX 2u
void cLoop(void)
{
int i = 0;
int j = 0;
for(i = 0 ;i < I_MAX ; i++)
{
for(j = 0 ;j < J_MAX ; j++)
{
printf("value of i is: %d,",i );
printf("value of j is: %d \n",j );
}
}
}
int main()
{
cLoop();
}
输出结果
value of i is: 0,value of j is: 0
value of i is: 0,value of j is: 1
value of i is: 1,value of j is: 0
value of i is: 1,value of j is: 1
value of i is: 2,value of j is: 0
value of i is: 2,value of j is: 1
每行代码开头的缩进只是为了美观,而不是作为代码的结束符,即使我们那前面代码的所有缩进都去掉,就像这样
#include <stdlib.h>
#define I_MAX 3u
#define J_MAX 2u
void cLoop(void)
{
int i = 0;
int j = 0;
for(int i = 0 ;i < I_MAX ; i++)
{
for(int j = 0 ;j < J_MAX ; j++)
{
printf("value of i is: %d,",i );
printf("value of j is: %d \n",j );
}
}
}
int main()
{
cLoop();
}
仍然不影响运行结果
value of i is: 0,value of j is: 0
value of i is: 0,value of j is: 1
value of i is: 1,value of j is: 0
value of i is: 1,value of j is: 1
value of i is: 2,value of j is: 0
value of i is: 2,value of j is: 1
下面我们尝试用python来实现上述功能,这个时候我们的缩进是符合python规则的
def python_loop():
I_MAX = 3
J_MAX = 2
for i in range(I_MAX):
for j in range(J_MAX):
print("value of i is:", i, end=", ")
print("value of j is:", j)
python_loop()
输出结果
PS D:\pythonLearn> python .\MyPython.py
value of i is: 0, value of j is: 0
value of i is: 0, value of j is: 1
value of i is: 1, value of j is: 0
value of i is: 1, value of j is: 1
value of i is: 2, value of j is: 0
value of i is: 2, value of j is: 1
下面我们去掉一部分缩进
def python_loop():
I_MAX = 3
J_MAX = 2
for i in range(I_MAX):
for j in range(J_MAX):
print("value of i is:", i, end=", ")
print("value of j is:", j)
python_loop()
输出结就会提示我们有缩进问题expected an indented block
PS D:\pythonLearn> python .\MyPython.py
File "D:\pythonLearn\MyPython.py", line 7
for j in range(J_MAX):
^
IndentationError: expected an indented block after 'for' statement on line 6
根据上述例子,我们就了解了python代码在分隔符上跟c语言的区别,以及我们所要遵循的规则。
2. 变量声明
在C语言中,需要在使用变量之前先声明变量的类型。变量的声明通常在函数的开头,也可以在代码块的任何地方进行。
比如前文中的i
和j
两个变量,在c语言中我们就需要对其进行初始化才能使用
int i = 0;
int j = 0;
但是在python中我们就可以直接使用
for i in range(I_MAX):
for j in range(J_MAX):
3. 数据类型
C语言提供了基本的数据类型,如整数、浮点数、字符等,而Python的数据类型更加丰富,包括整数、浮点数、字符串、列表、元组、字典、集合等。
在C语言中,提供了基本的数据类型,如整数、浮点数、字符等。以下是一些常见的C数据类型的示例:
#include <stdio.h>
int main()
{
int num = 10; // 整数类型
float pi = 3.14; // 浮点数类型
char letter = 'A'; // 字符类型
printf("num = %d\n", num);
printf("pi = %f\n", pi);
printf("letter = %c\n", letter);
return 0;
}
在这个示例中,我们声明了一个整数类型的变量num,一个浮点数类型的变量pi,和一个字符类型的变量letter。然后使用printf函数打印出它们的值。
num = 10
pi = 3.140000
letter = A
而在Python中,数据类型更加丰富。以下是一些常见的Python数据类型的示例:
num = 10 # 整数类型
pi = 3.14 # 浮点数类型
letter = 'A' # 字符串类型
my_list = [1, 2, 3, 4] # 列表类型
my_tuple = (1, 2, 3, 4) # 元组类型
my_dict = {'name': 'Alice', 'age': 25} # 字典类型
my_set = {1, 2, 3, 4} # 集合类型
print("num =", num)
print("pi =", pi)
print("letter =", letter)
print("my_list =", my_list)
print("my_tuple =", my_tuple)
print("my_dict =", my_dict)
print("my_set =", my_set)
在这个示例中,我们声明了一个整数类型的变量num,一个浮点数类型的变量pi,和一个字符串类型的变量letter。此外,我们还声明了一个列表类型的变量my_list,一个元组类型的变量my_tuple,一个字典类型的变量my_dict,和一个集合类型的变量my_set。然后使用print函数打印出它们的值。
num = 10
pi = 3.14
letter = A
my_list = [1, 2, 3, 4]
my_tuple = (1, 2, 3, 4)
my_dict = {'name': 'Alice', 'age': 25}
my_set = {1, 2, 3, 4}
4. 数组和列表
在C语言中,数组是一种固定大小的连续内存空间,而Python中的列表是一种动态大小的数据结构,可以根据需要自动调整大小。
#include <stdio.h>
int main()
{
int arr[5] = {1, 2, 3, 4, 5};
for(int i = 0; i < 5; i++)
{
printf("arr[%d] = %d\n", i, arr[i]);
}
return 0;
}
在这个示例中,我们声明了一个包含5个整数的数组arr,并初始化了数组的值。然后使用for循环遍历数组,打印出每个数组元素的值。
arr[0] = 1
arr[1] = 2
arr[2] = 3
arr[3] = 4
arr[4] = 5
而在Python中,列表是一种动态大小的数据结构,可以根据需要自动调整大小。以下是一个使用列表的Python示例:
my_list = [1, 2, 3, 4, 5]
my_list.append(6)
for i in range(len(my_list)):
print("my_list[{}] = {}".format(i, my_list[i]))
在这个示例中,我们声明了一个包含5个整数的列表my_list,并初始化了列表的值。但是,我们在初始化之后又利用list类型内置的append
函数扩展了一个成员,使用for循环和range函数遍历列表,打印出每个列表元素的值。
my_list[0] = 1
my_list[1] = 2
my_list[2] = 3
my_list[3] = 4
my_list[4] = 5
my_list[5] = 6
5. 循环语句
C语言中使用for循环和while循环来控制程序的流程,而Python中的循环语句更加简洁,只有for循环,可以遍历任何可迭代的对象。
前面已经多次使用了循环语句,c语言中的语法如下:
for(int i = 0; i < 5; i++)
{
printf("i = %d\n", i);
}
python中的语法:
for i in range(5):
print("i = {}".format(i)
6. 函数定义
在C语言中,函数需要在使用之前先进行函数原型的声明,而Python中的函数可以直接定义和调用,不需要事先声明函数原型。
以下是一个使用函数原型声明的C语言示例:
#include <stdio.h>
// 函数原型声明
int add(int a, int b);
int main()
{
int result = add(3, 4); // 调用函数
printf("result = %d\n", result);
return 0;
}
// 函数定义
int add(int a, int b)
{
return a + b;
}
在这个示例中,我们首先在代码的开头进行了函数原型的声明,声明了一个名为add的函数,该函数接受两个整数参数,并返回它们的和。然后在主函数中调用了这个函数。
而在Python中,函数可以直接定义和调用,不需要事先声明函数原型。以下是一个使用函数定义的Python示例:
def add(a, b):
return a + b
result = add(3, 4) # 调用函数
print("result =", result)
在这个示例中,我们直接定义了一个名为add的函数,该函数接受两个参数,并返回它们的和。然后在代码的后面直接调用了这个函数。
总结来说,在C语言中,函数需要在使用之前先进行函数原型的声明,而Python中的函数可以直接定义和调用,不需要事先声明函数原型。这使得Python中的函数定义更加简洁和灵活。
7. 内存管理
在C语言中,需要手动管理内存的分配和释放,包括使用malloc()和free()函数。而Python使用垃圾回收机制来自动管理内存,开发者不需要手动释放内存。
以下是一个使用malloc()和free()函数进行内存管理的C语言示例:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int* ptr = (int*)malloc(sizeof(int));
if(ptr == NULL)
{
printf("内存分配失败\n");
return 1;
}
*ptr = 10;
printf("*ptr = %d\n", *ptr);
free(ptr);
return 0;
}
在这个示例中,我们使用malloc()函数分配了一个整数大小的内存空间,并将其赋值给指针ptr。然后我们使用该内存空间存储了一个整数值,并打印出来。最后,我们使用free()函数释放了之前分配的内存。
而在Python中,使用垃圾回收机制来自动管理内存,开发者不需要手动释放内存。以下是一个使用Python进行内存管理的示例:
x = 10
print("x =", x)
# 不需要手动释放内存
8. 异常处理
Python提供了异常处理机制,可以捕获和处理程序运行过程中的异常。而C语言中没有内置的异常处理机制,需要开发者手动处理错误和异常,以下是一个使用异常处理的Python示例:
try:
x = 10 / 0
except ZeroDivisionError:
print("除数不能为零")
在这个示例中,我们尝试将10除以0,这会引发一个ZeroDivisionError异常。使用try-except语句,我们可以捕获这个异常并进行相应的处理。在except块中,我们打印出了一个错误消息。
而在C语言中,没有内置的异常处理机制,需要开发者手动处理错误和异常。以下是一个使用手动处理错误的C语言示例:
#include <stdio.h>
int main()
{
int x = 10, y = 0;
if(y == 0)
{
printf("除数不能为零\n");
return 1;
}
int result = x / y;
printf("result = %d\n", result);
return 0;
}
在这个示例中,我们首先检查除数y是否为零。如果是零,我们手动打印出一个错误消息,并返回一个非零值表示程序异常终止。否则,我们进行正常的除法运算并打印结果。
总结来说,Python提供了异常处理机制,可以捕获和处理程序运行过程中的异常。开发者可以使用try-except语句来捕获异常并进行相应的处理。而C语言中没有内置的异常处理机制,需要开发者手动处理错误和异常,通过条件判断和手动打印错误消息来处理异常情况。
结语
这一讲我们从python和c语言在语法上的不同切入,带大家了解了python的语法特点,也编写了示例代码,下一讲我们将从python的基本数据类型讲起,继续我们的python零基础学习之路。
此专题教程的程序我也将同步更新到GitHub仓库GitHub-pythonLearn,跟着我一起把自己的学习代码积累起来吧,不积跬步无以至千里,不积小流无以成江海,加油吧诸君!!!