Python学习笔记(Ⅰ)——Python程序结构与基础语法
作为微软的粉丝,最后终于向Python低头了,拖了两三个月终于下定决心学习Python了。不过由于之前受到C/C#等语言影响的思维定式,前期有些东西理解起来还是很费了些功夫的。
零.先抄书:
1.Python是解释型语言:
计算机是不能够识别高级语言的,所以当我们运行一个高级语言程序的时候,就需要一个“翻译机”来从事把高级语言转变成计算机能读懂的机器语言的过程。这个过程分成两类,第一种是编译,第二种是解释。
编译型语言在程序执行之前,先会通过编译器对程序执行一个编译的过程,把程序转变成机器语言。运行时就不需要翻译,而直接执行就可以了。最典型的例子就是C语言。
解释型语言就没有这个编译的过程,而是在程序运行的时候,通过解释器对程序逐行作出解释,然后直接运行,最典型的例子是Ruby。
通过以上的例子,我们可以来总结一下解释型语言和编译型语言的优缺点,因为编译型语言在程序运行之前就已经对程序做出了“翻译”,所以在运行时就少掉了“翻译”的过程,所以效率比较高。但是我们也不能一概而论,一些解释型语言也可以通过解释器的优化来在对程序做出翻译时对整个程序做出优化,从而在效率上超过编译型语言。
此外,随着Java等基于虚拟机的语言的兴起,我们又不能把语言纯粹地分成解释型和编译型这两种。
用Java来举例,Java首先是通过编译器编译成字节码文件,然后在运行时通过解释器给解释成机器文件。所以我们说Java是一种先编译后解释的语言。
再换成C#,C#首先是通过编译器将C#文件编译成IL文件,然后在通过CLR将IL文件编译成机器文件。所以我们说C#是一门纯编译语言,但是C#是一门需要二次编译的语言。同理也可等效运用到基于.NET平台上的其他语言。
2.与大多数语言不同,python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {} 。
缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。这也就是游标卡尺的梗的来源。
一.第一个Python程序:
先输出Hello World,然后调用排序函数对一个list进行冒泡的升序排序,尽管程序结构简单,但是包含了大多数的基础语法
## coding=utf-8
##冒泡排序与HelloWorld
list = [8,1,2,66,5,123]
def BubbleSort():
for i in range(len(list)):
for j in range(i):
if list[j] > list[j+1]:
list[j],list[j+1] = list[j+1],list[j]
return list if __name__ == "__main__":
print("hello world")
list = BubbleSort()
print(list)
程序的运行结果如下:
hello world
[1, 2, 5, 8, 66, 123]
为了方便对比,我们再使用C#的代码实现同样的功能:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World");
BubbleSort();
} private static void BubbleSort()
{
int[] data = { , , , , , };
for (int i = ; i < data.Length - ; i++)
{
for (int j = data.Length - ; j > i; j--)
{
if (data[j] > data[j - ])
{
data[j] = data[j] + data[j - ];
data[j - ] = data[j] - data[j - ];
data[j] = data[j] - data[j - ];
}
}
}
foreach (int i in data)
{
Console.Write(i + ",");
}
Console.ReadLine();
}
二.Python程序的程序结构
从上面我们可以大概看出,一个完整的py程序结构大概如下:

我们知道,对于C/C++/C#等编程语言来说,程序的入口一定是main()函数,但是如果沿用这种思路来理解python的话就很容易踩坑。
Python使用缩进对齐组织代码的执行,所有没有缩进的代码(非函数定义和类定义),都会在载入时自动执行,这些代码,都可以可以认为是Python的main函数。每个文件(模块)都可以任意写一些没有缩进的代码,并且在载入时自动执行,为了区分主执行文件还是被调用的文件,Python引入了一个变量__name__,当文件是被调用时,__name__的值为模块名,当文件被执行时,__name__为'__main__'。因此,在之前的代码中,我们基本上可以使用这种方式来设置main函数的调用。
三.常量与变量
1 常量:
py并没有提供const关键字来定义变量,哭……
2 变量:
python的变量定义不需要声明类型,直接name=value 就可以了,比如:
a=1 ##整型变量a
b=0.02 ##浮点型变量b
str = "Hello World" ##字符串c
d=true ##布尔值d
py个人理解应该是故意在弱化变量的概念,当使用C#的思想去理解就出现了很大的偏差。
C/C++中的变量的概念是面向内存的,所以你要声明一个变量,表明空间大小,存储的格式(整数,浮点),以及一个永久不变的名字指向这个变量。而python只有name和object,比如a=1的语句,实际上做了三件微小的工作:
- 创建name a
- 创建object 1
- 将name a 关联到1这个object
然后,就能够直接使用a来调用1这个对象。至于强弱类型什么的,别纠结了吧……
py提供了type()函数来判断变量的类型,如:
a, b, c, d = 20, 5.5, True, 4+3j
print(type(a), type(b), type(c), type(d))
执行结果如下:
<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>
3 数值类型:
python支持int(整型),longint(长整型),float(浮点)和complex(负数)四种类型的数值。
//碎碎念一句浮点只有float精度真的够用么……
举例:
a=10 ##int
b=51924361L ##长整型,用大写L结尾
c=15.20 ## 浮点
d=1+2j ##复数,用a+bj或complex(a,b)表示
4 字符串:
str = "Hello World" ##定义字符串
str1 = str[0:4] ##截取字符串,从上标到下标,注意下标从0开始
转义符:

格式化输出:py的格式化输出用法与C语言的printf函数一样:

四.列表与字典:
1.列表:
与声明其他变量一样,python在定义列表时不需要
List <int> list = new List<int>();
直接赋值即可:
list1 = ['physics', 'chemistry', 1997, 2000]
list2 = [1, 2, 3, 4, 5 ]
list3 = ["a", "b", "c", "d"]
与字符串的索引一样,列表索引从0开始。列表可以进行截取、组合等。
常见的列表操作函数如下:

2.元组:元组类似于静态列表,其中的元素不能修改。
3.字典:字典是键值对的集合,声明字典时一样不需要定义字典类型,也不需要new操作:
dict = {'Alice': '', 'Beth': '', 'Cecil': ''}
PS:1.字典的键不能重复,同时键是不会发生变化的。
2.python中向字典中增加值无需使用add方法,直接操作其键值即可:
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
dict['Age'] = 8; # 更新值
dict['School'] = "DPS School"; # 添加一个键值对
常见的字典函数如下:

Python学习笔记(Ⅰ)——Python程序结构与基础语法的更多相关文章
- python学习笔记:(一)基础语法
一.编码 默认情况下,python3采用的是utf-8,所有字符串都是unicode字符串.如果有其他需要的时候,可以修改为其他的. 如:# _*_ coding:gb2312 _*_ 二.标识符 标 ...
- Python学习笔记—Python基础1 介绍、发展史、安装、基本语法
第一周学习笔记: 一.Python介绍 1.Python的创始人为吉多·范罗苏姆.1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言 ...
- python学习笔记五 模块上(基础篇)
模块学习 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要 ...
- python学习笔记-python程序运行
小白初学python,写下自己的一些想法.大神请忽略. 安装python编辑器,并配置环境(见http://www.cnblogs.com/lynn-li/p/5885001.html中 python ...
- python学习笔记——多进程间通信——Linux信号基础
1 信号的基本描述 Signal信号(其全程为软中断信号)是Linux系统编程中非常重要的概念,信号是异步进程中通信的一种方式. 作用是通知进程发生了异步事件.进程之间可以调用系统来传递信号, 本身内 ...
- Python学习笔记(一):基础知识
一.什么是python? python是一种面向对象.解释型的计算机语言,它的特点是语法简洁.优雅.简单易学 二.编译型语言和解释型语言 编译型语言就是把程序编译成计算机语言然后执行,(一次编译到处运 ...
- Python学习笔记--Python字符串连接方法总结
声明: 这些总结的学习笔记,一部分是自己在工作学习中总结,一部分是收集网络中的知识点总结而成的,但不到原文链接.如果有侵权,请知会,多谢. python中有很多字符串连接方式,总结一下: 1)最原始的 ...
- go 学习笔记之值得特别关注的基础语法有哪些
在上篇文章中,我们动手亲自编写了第一个 Go 语言版本的 Hello World,并且认识了 Go 语言中有意思的变量和不安分的常量. 相信通过上篇文章的斐波那契数列,你已经初步掌握了 Go 语言的变 ...
- python学习笔记六 面向对象相关下(基础篇)
面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以将多函数中公用的变量封装到对象中) 对象,根据模板创建的 ...
随机推荐
- 程序猿最浪漫的表白,肯定会得到你的她——Jason niu 原文来自GitHub,本人已部分修改
程序猿最浪漫的表白,肯定会得到你的她——Jason niu 原文来自GitHub,主页本人已部分修改,感谢程序猿大神wuxia2001和hackerzhou的开源,感谢这两位大神! 视频结果展示 ...
- Kali Linux NetHunter教程Kali NetHunter支持的设备和ROMs
Kali Linux NetHunter教程Kali NetHunter支持的设备和ROMs NetHunter是一个基于Kali Linux为Nexus设备构建的Android渗透测试平台,其中包括 ...
- Centos6.5部署vsftpd+mysql认证
1.FTP传输原理 FTP,文件传输协议,是工作在应用层,基于TCP实现,依赖于互联网即可通讯. 1)连接模式 控制(命令)连接,用来通信,一直在线,客户端随机端口连接服务端TCP:21端口. 数据连 ...
- Petrozavodsk Winter-2018. Carnegie Mellon U Contest
A. Mines 每个点能爆炸到的是个区间,线段树优化建图,并求出SCC进行缩点. 剔除所有不含任何$n$个点的SCC之后,最小代价为每个入度为$0$的SCC中最小点权之和,用set维护即可. 时间复 ...
- 【自动化测试】robot framwork的一点小发现
我们在搭建完robotframwork框架并开始打开火狐浏览器的时候,总会碰到打不开浏览器的问题.这次,分享一个常见的小问题. 这个问题呢,是因为火狐的版本更新频繁,导致selenium的版本跟不上导 ...
- React(六)Props属性
state 和 props 主要的区别在于 props 是不可变的,而 state 可以根据与用户交互来改变.这就是为什么有些容器组件需要定义 state 来更新和修改数据. 而子组件只能通过 pro ...
- 关于DTO的理解
转自大神loveis715博文:http://www.cnblogs.com/loveis715/p/4379656.html 在一个web服务的实现中,我们常常需要访问数据库,并将从数据库中取得的数 ...
- ERP项目实施记录11-产品工艺流程图及单据关联图
借助百度的Echarts做了2个图表,一个展示产品的生产工艺流程,一个展示产品与订单.工程单的关系 上图为产品工艺流程图,鼠标放上去可以显示部件信息 黄色SO图标代表销售订单,单击打开销售订单 红色M ...
- IOS不支持iframe的解决办法
最近做ios的兼容,因为入口不同,需要把公共页面抽取出来,然后根据不同的值,传递给后台不同的入口.刚开始用iframe页面嵌套(第一次尝试使用),但发现iOS系统对iframe嵌套页面的高度和定位控制 ...
- 源码包安装apache
含有的命令:cd,wget,tar,cd,yum,./configure,make,make install,vim ===安装apache=== [root@ycj ~]# cd /usr/src/ ...