Python研究
听说Python是种高级语言,故打算研究一下,看看高级在哪
学习资源:https://www.liaoxuefeng.com/wiki/1016959663602400
由于上面所示的网站对Python进行了相当详细的讲述,故本文不对Python的细节一一展开,只挑一些比较有意思的点来写。
1. 不需要声明变量
在c++中,变量需要先声明,然后再赋值、使用。
在Python中,变量不需要声明,直接赋值,然后Python会根据值的类型来确定变量的类型。
如:

2. 代码块不使用{ },在代码结尾不需要“;”
在c++中,代码总是在{ }里面的,如:

但在Python,不需要使用{ }来封装代码块,而是用严格的缩进机制,如:

注意if else里面的内容,它们是对齐的,这意味着它们属于同一块代码块(当然,if 下面是一个代码块,else下面的是另一个代码块。)
代码块开始前,要加“ :”,如上图的 if (b*b - 4*a*c) <0 :
if和else也是对齐的,故它们是在同一个代码块中。
注意:“;”也不需要了
3. 函数也不需要声明,只需在函数名前加“def”来识别
在c++里,函数需要先在头文件中声明,然后在cpp文件中写函数的本体。
而在Python里,没有头文件,函数写法如下图:

要用def来识别函数本体,然后直接调用即可,如图中的print(MyFunction(5))。
注意,最好一开始判断一下变量类型是否是本函数使用的类型。
4. 代码量少
Python的代码量相对较少,可以一句代码把c++的一段代码写完,如下图:

L1是一个数组,但里面的数值不一定都是同一个类型。
L2的意思是把L1的字符串全部改为小写,形成新数组。
L2为['hello', 'world', 'apple']。
L2的那句代码称为生成式,里面有一个for循环和一个if判断语句。
5. 数组类型
list:普通数组
classmates = ['Michael', 'Bob', 'Tracy']
tuple:一旦初始化就不能修改
classmates = ('Michael', 'Bob', 'Tracy')
dict:与c++的map类似
d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
set:set和dict类似,也是一组key的集合,但不存储value。
s = set([1, 2, 3])
6. global和nonlocal
global是全局变量的关键词;
nonlocal是外层变量的关键词。
全局变量没什么好说的,调用前需要先申明一下,如:(不声明的话,局部变量会覆盖掉全局变量)
#整数部分
intNum = 0
#记录有几位小数
n = 0 def str2float(t):
global intNum
global n def char2num(s):
DIGITS = {'': 0, '': 1, '': 2, '': 3, '': 4, '': 5, '': 6, '': 7, '': 8, '': 9}
if s == ".":
return s
else:
return DIGITS[s]
def fn(x,y):
global intNum
global n
if y == "." :
intNum += x
return x
elif intNum > 0 :
n += 1
return x * 10 + y
else :
return x * 10 + y
x = reduce(fn, map(char2num,t))
x = x / (10 ** n)
#算完之后,全局变量初始化
n = 0
intNum = 0
return x
nonlocal用法如下:
#闭包练习题
def createCounter():
n = 0
def counter():
nonlocal n
n += 1
return n
return counter
用nonlocal可以避免污染全局。
在python中,以下写法是错误的:
def createCounter():
n = 0
def counter():
#nonlocal n
n += 1
return n
return counter
编辑器会提示,变量在定义前调用了。这样写在c++中没问题,但在python却成为问题了。
解决办法是用global或者nonlocal。
PS:Python中,可以在函数里面定义函数!
7. lambda匿名函数
python缩减代码量的一个手段:lambda
def is_odd(n):
return n % 2 == 1 L = list(filter(is_odd, range(1, 20))) #使用匿名函数后
L = list(filter(lambda x : x % 2 == 1, range(1, 20)))
上述代码中,两个L是相同的,lambda冒号前面的x表示函数参数。
对比可以发现,lambda代替了函数is_odd(n)。
PS:filter是高阶函数:filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
8. 高阶函数
上面介绍了一种高阶函数filter,接下来介绍map和reduce
map(): 它把传入的函数依次作用于每个元素,依次返回处理后的结果,如:
L = list(map(lambda x : x % 2 == 1, range(1, 20)))
L = [True, False, True, False, True, False, True, False, True, False, True, False, True, False, True, False, True, False, True]
reduce(): 把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
如:
L = reduce(lambda x,y :x+y, [1, 3, 5, 7, 9])
L = 25 (相当于1+3+5+7+9)
PS:使用reduce前需要from functools import reduce
Python研究的更多相关文章
- [Python] 学习资料汇总
Python是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大且完善的通用型语言,已经有十多年的发展历史,成熟且稳定.Python 具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用 ...
- 史上最全的Python电子书教程资源下载(转)
网上搜集的,点击即可下载,希望提供给有需要的人^_^ O'Reilly.Python.And.XML.pdf 2.02 MB OReilly - Programming Python 2nd. ...
- 【推荐分享】大量Python电子书籍教程pdf合集下载
网上搜集的,点击即可下载,希望提供给有需要的人^_^ O'Reilly.Python.And.XML.pdf 2.02 MB OReilly - Programming Python 2nd. ...
- 【分享】史上最全的Python电子书教程资源下载
网上搜集的,点击即可下载,希望提供给有需要的人^_^ O'Reilly.Python.And.XML.pdf 2.02 MB OReilly - Programming Python 2nd. ...
- 解决python执行cmd命令出现"XXX不是内部命令"的问题
由于最近呢,比较得空.无意中浏览到新闻XXX事件(你懂的).后面直接去百度云搜索下载,果然有资源. 怀着迫不及待的心情去打开,解压.我艹,竟然有解压密码.万恶的资本主义啊.作为程序员的我,怎么可能为这 ...
- Manual | BSD手册| Linux手册 | 数据库手册 | 编程开发手册 | WEB开发手册 | 软件应用手册 | 网络技术手册 | GNU手册
豆豆手册 □ BSD手册 □ Linux手册 □ 数据库手册 □ 编程开发手册 □ WEB开发手册 □ 软件应用手册 □ 网络技术手册 □ GNU手册 在线手册 首 页 BSD手册 ·FreeBS ...
- Vue (一) --- vue.js的快速入门使用
=-----------------------------------把现在的工作做好,才能幻想将来的事情,专注于眼前的事情,对于尚未发生的事情而陷入无休止的忧虑之中,对事情毫无帮助,反而为自己凭添 ...
- 一: vue的基本使用
一: vue的下载 vue.js是目前前端web开发最流行的工具库之一,由尤雨溪在2014年2月发布的. 另外几个常见的工具库:react.js /angular.js 官方网站: 中文:http ...
- 前端Vue之vue的基本操作
1.1 vue.js的快速入门使用 vue.js是目前前端web开发最流行的工具库之一,由尤雨溪在2014年2月发布的. 另外几个常见的工具库:react.js /angular.js 官方网站: 中 ...
随机推荐
- C# 进程 与 线程
C#多线程和线程池1.0.线程的和进程的关系以及优缺点windows系统是一个多线程的操作系统.一个程序至少有一个进程,一个进程至少有一个线程.进程是线程的容器,一个C#客户端程序开始于一个单独的线程 ...
- Puppet自动化管理配置
Puppet:开源系统配置和管理工具 随着虚拟化和云计算技术的兴起,计算机集群的自动化管理和配置成为了数据中心运维管理的热点.对于 IaaS.Paas.Saas 来说,随着业务需求的提升,后台计算机集 ...
- 【开发笔记】-Tomcat启动时设置Jdk版本
1. Window版本Tomcat 到bin下的setclasspath.bat文件,在文件的开始处添加如下代码: set JAVA_HOME=D:\Program Files\Java\jdk1.8 ...
- 16. Promise对象
目录 Promise对象 一.含义 1. Promise是什么 2. 实例讨论 二.Promise特性案例解析 1. Promise的立即执行性 2. promise的三种状态 3. Promise的 ...
- AI面试刷题版
(1)代码题(leetcode类型),主要考察数据结构和基础算法,以及代码基本功 虽然这部分跟机器学习,深度学习关系不大,但也是面试的重中之重.基本每家公司的面试都问了大量的算法题和代码题,即使是商汤 ...
- android studio学习----调试---断点调试
Android Studio调试其实也非常方便,一般问题直接通过AS的DDMS的Logcat就可以搞定.AS支持类似Eclipse的DDMS的所有功能.这里要说的是疑难问题的调试方式,即断点调试. 首 ...
- Python 序列、列表(List)、元组(Tuple)
序列 序列是Python中最基本的数据结构,包括字符串.列表.元组. 序列,顾名思义,是有序的,序列都有索引,都能进行索引.切片(截取).加(连接).乘(倍增).检查成员的操作. 因为序列有序,可通过 ...
- 3 Dalvik基础知识
Dalvik汇编基础知识: Dalvik指令:由位描述+指令格式标示 位描述: 1. 每16位空格隔开 2. 每个字母表示4位,每个字母按从高字节开始,排列到低字节.每四位之间可用 | 分开表示不同内 ...
- httpPost请求用java代码实现的方法
原文:https://www.cnblogs.com/johnson-yuan/p/6713384.html package com.day3.sample; //首先下面我我们需要导入的jar包和文 ...
- mysql字符串截取函数和日期函数
注:mysql下标索引从1开始,并包含开始索引 1.left(str,len) index<=0,返回空 index>0,截取最左边len个字符 select ), ), ), ) 结果 ...