作为一个程序员,在职业生涯当中可能会需要用到多种编程语言,具体使用哪种语言也是根据我们自己的需求来进行选择的,很难说一门语言就可以适用于所有问题的解决,所以也没有必要太过纠结于语言的使用与选择,还是要想好自己未来的职业发展方向,所以,下面仅针对python和java的区别进行梳理:
(1)python 跟 java 一样是强类型语言,也就是说它不会根据环境变化自动改变数据类型;
(2)python 是动态语言,而 java 是静态语言。也就是说 python 在编程时,永远不用给任何变量指定数据类型,而 java 写程序时必须声明所有变量的数据类型
(3)python 的模块类似于 java 的 class,不过python模块导入会执行代码的内容,而 java 不会
(4)python 与 java 的执行方式还是蛮像的,都是将源码编译成 byte code 然后交给相应的虚拟机去执行
(5)Python为了优化速度,避免为整数频繁申请和销毁内存空间,使用了小整数对象池。对小整数的定义是 [-5, 256] 这些整数对象是提前建立好的,不会被垃圾回收。在这个范围内所有的整数都只会被建立一次 与 java 类似,java 叫常量池,[-128,127],通过 IntegerCache 来实现的 ( Integer [-128,127)
(6)大整数池: python为了避免创建大整数浪费的内存空间和时间,将创建过的大整数加入大整数池。python中大整数池,默认大整数池里面为空,每一个py程序都有一个大整数池。使用大整数时如果大整数池里不存在该整数的话,会新建一个大整数对象。下次使用大整数时直接使用大整数池里的对象,而不是创建新的对象 。终端是每次执行一次,所以每次的大整数都重新创建,而在pycharm中,每次运行是所有代码都加载都内存中,属于一个整体,所以。这个时候会有一个大整数对象池,即处于一个代码块的大整数是同一个对象。c1 和d1 处于一个代码块,而c1.b和c2.b分别有自己的代码块,所以不相等。 类似于 java 的 字符串常量池,java 不一样,基本数据类型在同一个 jvm 中都会重用。
(7)如果是其他普通类型对象的新建,python会请求内存,申请内存 。当n1的引用指向其他对象时,原有对象的引用计数会自动减1,没有被引用的对象会立即回收( 引用计数法 )。与 java 类似,但 java 不是通过引用计数来回收垃圾的,而是通过 到 GCROOT 的路径通不通来回收垃圾的 ( 可达性分析法 )
(8)python 中有全局变量,而 java 中没有
(9)python引用变量的顺序: Local ->Enclosing ->Global ->Built-in ,与 java 一样,就近原则
(10)Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问, 与 java 类似
(11)python中的字典 key 不能是可变的,可变的会报错,而java中没有此限制,虽然说可能不应该以可变对象为 key
(12)python 的序列( list )、字典( dict )、集合( set ),都可以是混合类型
(13)python 的函数在一定的程序上可以类比于 java 的方法,但函数是不同于方法的
(14)Python 函数的 return 语句可以返回任意类型,也就是说 Python 的函数并没有固定的返回类型,符合动态语言的标识,而java 只能返回特定的类型
(15)Python 函数的参数可以通过关键字指定,而 java 方法不可以。Python 函数有默认参数,而 java方法 没有
(16)当我们在函数中引用一个变量时,Python 将隐式地默认该变量为全局变量。但是,一旦变量在没有 global关键字修饰的情况下进行了修改操作,Python 会将其作为局部变量处理,并在外部作用域中隐藏任何类似命名的变量
(17)python 的函数定义也可以嵌套,而 java 不可以
(18)python 中的 模块( module ) 其实就是python源文件,package + module 构成了 Python 中的依赖,与 java 类似
cainiaofei
2022-09-30
import os
import json
import time
path = './'
path_merges = './results_merges'
file_list = os.listdir(path)
json_list = []
data_list = []
out_time = time.strftime("%m_%d_%H_%M")
for file in file_list:
if file.endswith(".json"):
json_list.append(file)
print(json_list)
print(f"json文件数量:{len(json_list)}")
i = 1
for json_file in json_list:
json_path = os.path.join(path, json_file)
with open(json_path, 'r') as f:
locals()['json_data' + str(i)]= f.read()
locals()['data_' + str(i)] = json.loads(locals()['json_data' + str(i)].strip())
data_list = data_list + list(locals()['data_' + str(i)].items())
i += 1
data = dict(data_list)
json_data = json.dumps(data, ensure_ascii=False)
if not os.path.exists(path_merges):
os.mkdir(path_merges)
with open(os.path.join(path_merges, f'merges_{out_time}.json'),"w") as f1:
f1.write(json_data)
cainiaofei
2022-09-30
import turtle
t = turtle.Pen()
t.speed(0) #0:最快的 1:最慢的 5/10:比较快
t.width(3) #设置宽度
my_color = ("red","green","yellow","blue","purple")
for x in range(20):
t.goto(0,-(x-1)*20)
t.pendown()
t.color(my_color[x%len(my_color)]) #这样就可以不断的循环使用元组里的颜色
t.circle(x*20)
t.penup()
turtle.done()
cainiaofei
2022-09-30
获取方式有很多种,比如(1) 借助handler,是介绍最多的一种方法,但是用起来比较麻烦;(2)使用response headers的set_cookie;(3)使用response的cookies属性获取
cainiaofei
2022-09-30
在python3.6中安装openaxu;需要.下载numpy和opencv-python,根据已经安装的python版本号下载相对应的numpy和opencv_python。例如,python3.6是32位的,那么我就下载了相对应的opencv_python-3.4.1-cp36-cp36m-win32.whi和numpy-1.14.5+mkl-cp36-cp36m-win32.whl。如果python版本是64位的,就下载相对应的64位的numpy和opencv_python。下载完成后,按住win+R输入cmd进入命令行界面。将路径切换到已经下载的numpy和opencv_python的文件所在目录。然后输入pip install numpy-1.14.5+mK-cp36-cp36m-win32.whl和pip install opencv_进行安装
cainiaofei
2022-09-30
s = [1,2,3,4,5,6]
for i in s:
print(s.pop())
6
5
4
S
[1, 2, 3]
cainiaofei
2022-09-30
Python本身的运行相对于c++等就是要慢一点的,所以在编写代码的过程中要尽量编写高效率的代码,定位运行慢的代码可以使用Python 性能分析工具 pyinstrument,但是需要安装pip install pyinstrument,然后导入from pyinstrument import Profiler,导入之后就可以按照以下的格式进行判断:
profiler = Profiler() #实例化
profiler.start() #标识要检查的代码开始
#要进行分析的代码
profiler.stop() #标识要检查的代码结束
profiler.print() #打印检查结果
提升python代码运行速度的小技巧如下:
要选择合适的数据结构
善用强大的内置函数和第三方库
尽量少用循环
避免重复计算
少用全局变量
cainiaofei
2022-09-30
Python运行慢的原因是Python是一门动态语言,不会提前将数据类型和分配空间设定好。这样设计的优势是程序员不需要估计变量位宽以分配对应的数据类型,同时不考虑位宽溢出。因为它发现当一个4字节存不了的时候,会自动用8个字节存。而。C++等静态语言都会提前给数据分配好空间,这样有两个特点:(1)编译之后,通常在内存条上开辟连续内存空间,就算不连续也能做到虚拟连续;(2)默认数据类型不会溢出;这就是C++比Python快的重要原因。Python在追求“易用性”的前提下,丢弃了数据类型预分配等底层操作,从而导致速度大大降低。仅从语言特性的角度来看,纯Python程序的性能追平C++的可能性不大。不过可以通过各种加速手段,实现很大程度地接近。
cainiaofei
2022-09-30
Lean 是 QuantConnect 开源的一款非常强大的开源量化交易平台,可以回测或运行Python或者C#写的策略,并在代码仓库中内置了上百个C#和Python的策略算法。
这个开源的算法交易引擎,专为让用户方便轻松地进行策略研究、回测和实时交易而构建。它集成了常见的数据提供商和券商,因此还可以快速部署算法交易策略。
cainiaofei
2022-09-30
print('请输入一个整数:',end = '')
x = input()
print('十进制数为: ' + x)
print('二进制数为: ' + bin(int(x)))
print('八进制数为: ' + oct(int(x)))
print('十六进制数为: ' + hex(int(x)))
print('浮点数数为: %.1f' % float(x))
print('复数为: ',complex(x))
cainiaofei
2022-09-30
一定是要python3的,因为python2的版本会慢慢停止维护,而且python2与python3的很多用法是不同的,所以建议直接学习python3,python3也优化了很多python2的内容。
cainiaofei
2022-09-30
Python相对于其他语言来说,是很适合初学者进行学习的,通俗易懂好上手,可以很快做出一定的成果,python语言的难度比C++低很多,python是一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。所以初学者适合学习python。
python自身是在其他语言的根基之上衍生出来的,包含了C++、ABC、Algol-68、SmallTalk、Unix shell 和其他的脚本语言。不同于其他编程语言,python在学习之初并不需要其他复杂的知识背景,就可以入手学习。 同时,python近来的热度也越来越高。因为python 的实用性非常强,现在以及未来,人工智能AI 编程的主流工具都是python,所以python更适合初学者。
后端开发、前端开发、爬虫开发、人工智能、金融量化分析、大数据、物联网等,python应用无处不在,搜索引擎Google的核心代码是python完成的、迪士尼公司动画生成的Unix版本都内建了python环境支持、国内知名的豆瓣网是使用python技术建立……可见python应用开发技术在各公司都有大规模使用,python的发展前景是不可估量的。
python为脚本语言,需要边解释边运行。好处是不需要编译,可以直接运行。坏处是由于边解释边运行,运行效率慢。C++为编译语言需要先编译再运行。好处是运行速度快,尤其对于大型程序,效率提升明显。坏处是程序更新后,需要重新编译运行,不是很方便。
python语法简单,语句简洁,使用方便,上手容易,而且不需要编译可以即使运行,尤其在Jupyter Notebook上运行,那叫一个得心应手。C++语法复杂,格式要求高,使用不便,上手较难。
python在人工智能领域占据有压倒性的优势,有众多的库支持,大多数第三方库都是基于python开发或者提供完整的API。
当然,学习哪门编程语言还要结合自己的职业发展方向与兴趣爱好,不要单纯为了学习工具而学习。
cainiaofei
2022-09-30
对于这么大的数据量进行遍历操作,使用for循环的 效率是比较低的,可以尝试使用apply 或者map进行操作:
(1)apply:
· 既可以用在DataFrame,也可以用到单独的Series中
· 运用到DataFrame时,是用到了整行或者整列上,不是逐一运用到每个元素上
· 运用到Series时,作用到每个元素上
· 第一个参数只接收python原生函数或者numpy中的函数
(2)map
· 只能运用到Series的每个元素上
· 参数可以是函数也可以是字典,还可以是序列
(3)applymap
· 只能应用在DataFrame中,并且是作用在DataFrame的每个元素中
· 参数只接收可调用的函数
cainiaofei
2022-09-30
(1)可以先读取数据,然后使用dataframe的转置功能df.T进行行列的互换
(2)也可以使用数据透视表pivot_table,pivot_table() 的特点就是默认显示指定索引列和所有数值列。索引显示的是唯一值,所以会把对应的数值处理成均值。其他str类型的列都会自动忽略。当然,使用pivot_table() 时,可以通过添加参数进行计数或求和
cainiaofei
2022-09-30
原因是因为Python底层由C来写,调用底层C语言在编译时无法解析这个参数的名称,而目前Python的底层设计无法解决这个问题,所以直接传入参数即可,不要加入default=,这里语法没问题。
(1)错误写法:
d = {
'key': 2,
}
print(d.get("key", default=0))
(2)正确写法:
d = {
'key': 2,
}
print(d.get("key", 0))
cainiaofei
2022-09-30
随着人工智能的热度越来越高,Python这个词我们听到的越来越多,伴随着Python这个单词一起涌入我们视线的还有很多句子:人生苦短,我用Python;Python-人工智能第一语言等等这样的句子。Python真的如大家说的那样这么厉害么?在所有编程语言里,Python并不算年轻,从1991年发布第一个版本,至今已经快30年了。最近几年,随着人工智能概念的火爆,Python迅速升温,成为众多AI从业者的首选语言。那么Python到底有什么魔力呢?我们从四个要点看看为什么Python能够成为人工智能的第一语言。
简便,直观且通俗易懂,新手福音,跟其他语言比较,
Python有着简便、直观且通俗易懂的优势。
编译
VS 解释
,
Python是一门解释型语言。充当编程语言与机器语言的翻译官是解释器,解释器不会一次把整个程序翻译出来,而是每翻译一行程序叙述就立刻运行,然后再翻译下一行再运行,不产生目标程序。解释器就像是同声口译,编程语言每说完一句话,解释器立即翻译给计算机,计算机立即执行程序。
而且还提供了丰富的计算库和可视化库。比如数据神器
NumPy
、可视化库
Matplotlib
、网络爬虫库:
requests、scrapy、selenium、beautifulSoup
;建模库:
nltk、keras、sklearn
等
语言简单易学,支持库丰富强大,这两大支柱从早期就奠定了
Python的发展基础。技术的普及推广就像滚雪球,早期的积累相对缓慢,一旦过了临界点,就是大爆发。别的不说,就说现在tensorflow,caffe之类的深度学习框架,主体都是用Python来实现,提供的原生接口也是Python。
正是由于上述的
特点,Python在人工智能领域中已经遥遥领先其他的语言占据了头把交椅。
cainiaofei
2022-09-30
Python相对于其他语言来说,是很适合初学者进行学习的,通俗易懂好上手,可以很快做出一定的成果,python语言的难度比C++低很多,python是一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。所以初学者适合学习python。
python自身是在其他语言的根基之上衍生出来的,包含了C++、ABC、Algol-68、SmallTalk、Unix shell 和其他的脚本语言。不同于其他编程语言,python在学习之初并不需要其他复杂的知识背景,就可以入手学习。 同时,python近来的热度也越来越高。因为python 的实用性非常强,现在以及未来,人工智能AI 编程的主流工具都是python,所以python更适合初学者。
后端开发、前端开发、爬虫开发、人工智能、金融量化分析、大数据、物联网等,python应用无处不在,搜索引擎Google的核心代码是python完成的、迪士尼公司动画生成的Unix版本都内建了python环境支持、国内知名的豆瓣网是使用python技术建立……可见python应用开发技术在各公司都有大规模使用,python的发展前景是不可估量的。
python为脚本语言,需要边解释边运行。好处是不需要编译,可以直接运行。坏处是由于边解释边运行,运行效率慢。C++为编译语言需要先编译再运行。好处是运行速度快,尤其对于大型程序,效率提升明显。坏处是程序更新后,需要重新编译运行,不是很方便。
python语法简单,语句简洁,使用方便,上手容易,而且不需要编译可以即使运行,尤其在Jupyter Notebook上运行,那叫一个得心应手。C++语法复杂,格式要求高,使用不便,上手较难。
python在人工智能领域占据有压倒性的优势,有众多的库支持,大多数第三方库都是基于python开发或者提供完整的API。
当然,学习哪门编程语言还要结合自己的职业发展方向与兴趣爱好,不要单纯为了学习工具而学习。
cainiaofei
2022-09-30
界面上如果能看到就不是hidden,通常爬虫的一大困难是html是由js渲染,并不是简单的发请求就可以获得肉眼看到的内容。解决方法:用selenium等模拟用户操作。Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium可以直接运行在浏览器上,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器)。Selenium可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生。Selenium自己不带浏览器,不支持浏览器的功能,它需要与第三方浏览器结合在一起才能使用.先下载selenium webdriver 'geckodriver.exe’,下载好后放到python目录里面
firefox的目录也要添加到环境变量中,Selenium库里有个叫WebDriver的API。WebDriver有点儿像可以加载网站的浏览器,但是它也可以像BeautifulSoup或者其他Selector对象一样用来查找页面元素,与页面上的元素进行交互(发送文本、点击等),以及执行其他动作来运行网络爬虫。
cainiaofei
2022-09-30