听说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研究的更多相关文章

  1. [Python] 学习资料汇总

    Python是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大且完善的通用型语言,已经有十多年的发展历史,成熟且稳定.Python 具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用 ...

  2. 史上最全的Python电子书教程资源下载(转)

    网上搜集的,点击即可下载,希望提供给有需要的人^_^   O'Reilly.Python.And.XML.pdf 2.02 MB   OReilly - Programming Python 2nd. ...

  3. 【推荐分享】大量Python电子书籍教程pdf合集下载

    网上搜集的,点击即可下载,希望提供给有需要的人^_^   O'Reilly.Python.And.XML.pdf 2.02 MB   OReilly - Programming Python 2nd. ...

  4. 【分享】史上最全的Python电子书教程资源下载

    网上搜集的,点击即可下载,希望提供给有需要的人^_^   O'Reilly.Python.And.XML.pdf 2.02 MB   OReilly - Programming Python 2nd. ...

  5. 解决python执行cmd命令出现"XXX不是内部命令"的问题

    由于最近呢,比较得空.无意中浏览到新闻XXX事件(你懂的).后面直接去百度云搜索下载,果然有资源. 怀着迫不及待的心情去打开,解压.我艹,竟然有解压密码.万恶的资本主义啊.作为程序员的我,怎么可能为这 ...

  6. Manual | BSD手册| Linux手册 | 数据库手册 | 编程开发手册 | WEB开发手册 | 软件应用手册 | 网络技术手册 | GNU手册

    豆豆手册 □ BSD手册 □ Linux手册 □ 数据库手册 □ 编程开发手册 □ WEB开发手册 □ 软件应用手册 □ 网络技术手册 □ GNU手册 在线手册 首 页 BSD手册   ·FreeBS ...

  7. Vue (一) --- vue.js的快速入门使用

    =-----------------------------------把现在的工作做好,才能幻想将来的事情,专注于眼前的事情,对于尚未发生的事情而陷入无休止的忧虑之中,对事情毫无帮助,反而为自己凭添 ...

  8. 一: vue的基本使用

    一: vue的下载 vue.js是目前前端web开发最流行的工具库之一,由尤雨溪在2014年2月发布的. 另外几个常见的工具库:react.js /angular.js 官方网站: ​ 中文:http ...

  9. 前端Vue之vue的基本操作

    1.1 vue.js的快速入门使用 vue.js是目前前端web开发最流行的工具库之一,由尤雨溪在2014年2月发布的. 另外几个常见的工具库:react.js /angular.js 官方网站: 中 ...

随机推荐

  1. org.springframework.stereotype

    org.springframework.stereotype 1.@controller 控制器(注入服务) 2.@service 服务(注入dao) 3.@repository dao(实现dao访 ...

  2. asp.net 报错 SAP 报错 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)

    “/”应用程序中的服务器错误. 试图加载格式不正确的程序. (异常来自 HRESULT:0x8007000B) 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该 ...

  3. 推荐算法之E&E

    一.定义 E&E就是探索(explore)和利用(exploit). Exploit:基于已知最好策略,开发利用已知具有较高回报的item(贪婪.短期回报),对于推荐来讲就是用户已经发现的兴趣 ...

  4. 一. jmeter

    1.性能测试概述 1.1 主要方向是测试系统在一定负荷压力下,系统的响应时间,吞吐量,稳定性,系统的可扩展性等性能指标. 结合应用的架构和实现细节找出问题,并最终确认问题得到解决的过程. 目的: 1. ...

  5. java基础小练习,1-打印一百次(1~10)的随机数,2-固定一个随机数(1~100),然后猜出他,3-定义以指定格式打印集合(ArrayList类型作为参数),使用{}括起来,使用@代替,分隔每个元素

    推荐自己码一下,可以使用别的方法,面向对象,不需要注重过程 /* 题目:我需要打印一百次(1~10)的随机数 */ import java.util.Random; public class demo ...

  6. 基于tensorflow的简单鼠标键盘识别

    import cv2 as cvimport tensorflow as tfimport numpy as npimport random ##以下为数据预处理,分类为cata,总共样本为cata* ...

  7. kvm第一章--概念

  8. VS 对话框控件的Tab顺序问题

    我们先来直观的看看各个控件的Tab顺序吧.打开“Resource View”视图,然后在资源中找到对话框IDD_ADDITION_DIALOG,双击ID后中间客户区域出现其模板视图.在主菜单中选择“F ...

  9. ssh工具推荐

    FinalShell 看图就知道功能多强大了, 官网地址 http://www.hostbuf.com

  10. Vue Nginx反向代理配置 解决生产环境跨域

    Vue本地代理举例: module.exports = { publicPath: './', devServer: { proxy: { '/api': { target: 'https://mov ...