跨语言学习的基本思路及python的基础学习
笔者是C#出身,大学四年主修C#,工作三年也是C#语言开发。但在学校里其他的语言也有相应的课程,eg:Java,Php,C++都学过,当然只是学了皮毛(大学嘛,你懂得),严格来说未必入门,但这些语言的代码阅读倒是不成问题,毕竟触类旁通嘛,有道是“一法通,万法明”,多学学其他的也没坏处。
近期被临时借调到其他项目组,由于新项目用的是Python,本人呢又没有python开发经验(之前只是知道有这门语言),工期呢两周多吧,简单来说就是时间紧,任务重,而且开发环境完全陌生,于是就得快速学会使用一门新语言。如何跨语言学习就成了一个必须要考虑的问题。下文开始讲述一下我的思路仅供借鉴。
第一:环境搭建。这个事情放第一位,如果环境就有问题,以后的开发基本上就是空谈。一般不建议去网上看教程,这时候直接问老员工,或者让他帮忙。(时间紧嘛,如果时间充裕可以自己尝试搭建开发环境)
第二:熟悉ide。首先,尽量使用项目组推荐的ide,避免使用其他ide导致问题出现时,无人解答。当然如果是有高人直接用文本编辑器开发的情况(主要出现在解释型语言或者脚本语言开发),可以忽略这一条。所谓熟悉ide,一方面熟悉界面,哪一部分是什么功能,另一方面熟悉快捷键,提高开发效率。常用快捷键其实没有多少,只选择自己常用的快捷键强化训练。
第三:学习语言。语言学习有速成的,有慢成的。时间允许的情况,建议慢慢来,将基础打扎实。时间不允许的时候,以工作为导向,需要什么就学什么。怎么速成,我也摸索到一点经验。
1.语言的基本类型。因为是跨语言学习,自己脑海中一定有其他语言的干扰,这个不要在意,你需要在意的是基本类型之间的差异,个人建议有对比的学习。将差异记录下来,不要只是大脑强记,勤翻阅笔记,这是个好习惯。
2.语言的基本语法。大多数的编程语言的编程逻辑只有3个,判断、循环和跳转。你需要速记的就是这三种逻辑的所有写法及变体。以下以C#为例:
判断一般是if-else或者是switch-case,条件判断和值判断。
循环一般是for、foreach、while、do-while,已知或者指定长度的循环和便利循环。
跳转一般是break、continue、return、goto(goto是禁忌用法,除非很清晰逻辑运行,否则不建议使用),循环中跳转和值返回。
3.常用操作。常用操作一般是字符串处理,类型转化及格式化数据,各数据类型的常用操作方法,文件、文件夹及路径操作,读写流操作,数据库操作,网络通信和多线程。熟悉相应的操作方法及方法重载。
经过以上几个步骤的学习强化,短期内看懂一门新语言是没有问题的。当然开发不仅是要看懂,更重要的是写出来,这就需要自己动手了,谁也帮不了你,必须自己动手写,大量的写。只有这样才有可能短期速成。其实以上经验也适用于零基础的学习,只是困难会几何倍的上涨,而且也不建议零基础的人选择速成。另外,少看一些教程,直接去找语言相关的api,这是最直接粗暴的办法,因为很多教程是非原创的,也没有人实践过,甚至都不适合你的环境,这些都是有可能减缓你的学习进度。
-------------------------------------------------------分隔符:以下是个人的python基本学习的笔记,仅供参考------------------------------------------------------------------
数据类型:
数据类型有五种标准类型:
Numbers(数字)String(字符串)List(列表)Tuple(元组)Dictionary(字典)
数字可以定义复数,a+bj ,a-bj(a,b分别为复数的实部,虚部;J可以大写也可以小写)
list列表,跟C#里的列表不同在于,C#中列表是同一种类型的,python的不是。
eg:
list = [123, '1354', "78e", 12.5],[32,254,"wewr",22.5];
print list;//全部输出
print list[0][1:3];//返回一个列表,第一个列表的第二个元素后到第四个元素之前的元素,注意是前闭后开的区间 ['1354', "78e"] (3-1)个元素
print list[1][0];//返回一个具体值
print list[1][1:];//返回一个列表,第二个列表从第二个元素开始的所有元素。
字符串可以当做list操作,规则跟list一样
元组用小括号,list用中括号,字典用大括号。元组不支持更新,list支持更新
字典是键值对,一维的。list是多维的。
字典是无序的,列表是有序的
常用方法:
range(start,stop,step=1)返回一个列表, 从start到stop(不包含),累加step ,常用于for循环 eg: range(2,5,2) 结果 [2,4]
字符串操作:
1.strobj.count(搜索字符串,起始位置,结束位置)返回检索字符串在原字符串中出现的次数
2.strobj.endswith(搜索字符串) 返回是否以搜索字符串结尾,不推荐使用其重载方法。
3.strobj.find(搜索字符串) 返回搜索字符串的索引,如果不存在返回-1
4.strobj.index(搜索字符串)返回搜索字符串的索引,如果不存在抛出异常
5.strobj.replace(被替换,替换为)
6.strobj.strip([字符串])默认去掉字符串两端的空格,指定参数后,去掉指定字符串
列表操作:
1.list.count(obj)返回obj在list中出现的次数。
2.list.__len__() 返回list的长度
3.list.extend(seq) 向列表中插入多个元素。用一个列表填充另一个列表
4.list.insert(index,obj) 向列表指定位置插入对象
5.list.pop([index]) 默认返回最后一个元素(类似栈的先进后出),并删除该元素。指定索引时返回指定对象。
6.list.sort([func])按照默认方法排序或者按提供的方法排序。
文件操作:
1.open(“文件名”,“操作方式”)。返回一个文件对象。文件默认是当前路径下,可以指定路径注意路径的书写方式,操作方式常用“r+”,“w+”,“a+”,都是读写操作只是光标初始位置不同。
2.fileobj.close() 关闭当前文件对象。当一个文件对象被重新指定给另一个文件时,会关闭之前的文件,但是建议使用close。
3.fileobj.write() 可以将二进制数据或者文字写入。对应的要使用二进制方式打开文件。此方法不会自动在字符串的结尾处添加换行符。
4.fileobj.read([字节数]) 无参数时将所有内容读出。指定长度时将读出指定长度的内容,并将光标停留在该位置。
5.fileobj.tell()获取文件内光标的位置
6.os.rename(当前名称,新名称) 重命名文件 需要引入os
7.os.remove(文件名) 删除文件 需要引入os
8.fileobj.next() 获取下一行的内容
9.fileobj.readline([字节数]) 读取整行,包括“\r\n” ,如果指定字节数,返回光标位置的指定长度的内容
文件夹操作:
需要引入os模块
1.os.mkdir() 在当前目录下创建文件夹
2.os.chdir(路径)可以跳转到指定路径 注意指定路径的方式 “\”在字符串中需要转义
3.os.getcwd() 显示当前工作路径 os.getcwdu() 显示当前工作路径的unicode对象
4.os.rmdir()删除文件夹。删除文件时必须现将其中内容全部清空。
5.os.chmod(目录,权限) 慎用 修改目录权限
6.os.listdir(path)返回一个列表,显示指定目录下文件夹和文件
7.os.removedirs(path) 递归删除目录
正则表达式:
需要引入re模块
1.re.match(表达式,内容[,匹配模式]) 尝试从字符串的起始位置匹配,匹配成功返回一个匹配对象,若匹配不到返回None;
2.re.search(表达式,内容[,匹配模式]) 扫描整个字符串,返回第一个匹配的结果,如果没有匹配到就返回None
3.re.sub(表达式,替换为字符串,原始字符串[,替换次数,匹配模式])
网络通信Socket:
需要引入socket模块
服务器端
1.socket() 创建套接字对象
2.sobj.bind(主机名,端口号)绑定地址套接字
3.sobj.listen(最大连接数) 开始监听端口,并指定最大监听数量
4.sobj.accept() 阻塞式接受tcp请求
客户端
5.sobj.connect(主机名,端口号) 连接主机
通用方法
6.sobj.recv(缓冲区大小) 接收数据 ,以字符串返回
7.sobj.send(字符串) 发送字符串
8.sobj.close() 关闭套接字
多线程:
需要引入thread模块
thread.start_new_thread(线程函数,参数元组[,可选参数]) 开始新线程
需要引入threading模块
threading.currentThread() 返回当前线程变量
threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程
threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。
Thread类 继承Thread类,需要建议重写_init_(),run()方法 ,继承中子类不会主动去调用父类构造函数
run() 线程活动的方法
start() 启动线程
isAlive() 返回线程是否活动
getName()
setName()
join([超时时间]) 等待线程中止(调用中止、正常退出或者抛出异常) 。如果设置超时时间,如果在超时时间之内没有阻塞线程就不再阻塞该线程。实际中,在前一个线程未完成的情况下,下一个线程从前一个线程的结束时间起再设置一段超时时间。
线程同步: threading.lock() 创建一个线程锁对象
tlock.acquire() 加锁
tlock.release()解锁
将只允许一个线程运行的代码放在锁对象的两个方法之间。
Json:
需要引入json模块
json.dumps(对象) 将对象转换成json字符串
json.loads(字符串) 将json字符串转成pytho的数据类型 从输出结果看是一个字典
python的面向对象
python在设计之初就包含了面向对象的思想。
类,方法,继承,对象,实例化这些常见的概念在python中也存在。但是值得注意的是类变量(或者叫属性)与常见的面向对象语言中的属性变量不太一样。
python中的类变量最大的特点就是在整个实例化中是公用的,因此不建议在类中定义变量。类似与C#中的静态公共变量。在类的内部使用时,用类名加点来调用。
构造函数是特定的__init__(),与C#或者Java的构造方法是不同的。
方法的声明实现也不同,def关键字表示声明方法,方法必须有一个额外的参数,第一个参数名称默认是self,代表类的实例。在调用的时候却不需要对该参数传值。self不是关键字,换成 runoob 也是可以正常执行的
创建实例不使用new来实例化对象,直接类名加上括号就可以,类似方法的调用。
可以使用del关键字来回收对象,也可以使用析构函数__del__
继承,python是多继承的,声明时使用小括号将父类包裹。python的继承特点:
1.子类不会自动调用父类的构造函数,需要在子类的构造函数中手动调用。
2.python根据类型来调用方法,如果在子类中不存在,才会去试着调用父类的方法。主要是针对方法重写。
私有字段和私有方法都是以两个下划线开头,只能在内部访问。
-------------------------------------------------------ps------------------------------------------------------------
泛泛之谈,不值一哂,只为抛砖引玉。
跨语言学习的基本思路及python的基础学习的更多相关文章
- Python入门基础学习 三
Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形 ...
- Python入门基础学习 二
Python入门基础学习 二 猜数字小游戏进阶版 修改建议: 猜错的时候程序可以给出提示,告诉用户猜测的数字偏大还是偏小: 没运行一次程序只能猜测一次,应该提供多次机会给用户猜测: 每次运行程序,答案 ...
- Python入门基础学习 一
Python入门基础学习 一 Python下载及安装 下载地址:https://www.python.org/,选择最新的版本下载 稍等一会,安装完成. 简单语句 从idle启动Python:IDLE ...
- Python入门基础学习(环境安装/字符串)
Python基础学习笔记(一) 编译性语言与解释性语言: 编译性语言:读完代码再执行,一般会生成一个文件,如C语言会生成一个.h的文件给计算机执行 如:C,C++,C#,Java,Go 解释性语言:读 ...
- Python的基础学习(第二周)
模块初始 sys模块 import sys sys.path #打印环境变量 sys.argv#打印该文件路径 #注意:该文件名字不能跟导入模块名字相同 os模块 import os cmd_res ...
- Python入门基础学习(面向对象)
Python基础学习笔记(四) 面向对象的三个基本特征: 封装:把客观事物抽象并封装成对象,即将属性,方法和事件等集合在一个整体内 继承:允许使用现有类的功能并在无须重新改写原来的类情况下,对这些功能 ...
- python函数基础学习
函数的定义与调用: def 函数名(参数1,参数2): ‘’’函数注释’’’ print(‘函数体’) return 返回值 定 义:def关键字开关,空格之后接函数名和圆括号,最后冒号结尾 def ...
- Python入门基础学习(文件与异常处理)
Python基础学习笔记(七) 捕获异常的语法格式: 文件的基本操作: 打开文件 读.写文件 关闭文件 read方法 --读取文件: open函数的第一个参数是要打开的文件名(文件名区分大小写) 如果 ...
- Python入门基础学习(时间模块,随机模块)
Python基础学习笔记(六) time模块: 时间的三种表示方法: 1.格式化字符串 2.时间戳 用来表示和1970年的时间间隔,单位为s 3.元组 struct_time 9个元素 time的st ...
随机推荐
- wemall app商城源码中实现带图片和checkbox的listview
wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享其中实现带图片和checkbox的listvi ...
- c# 将匿名类或者集合转Json格式数据一些方法
要说写这个功能呢也是因为工作需要,白天呢上班写个Web页面需要ajax请求后台并将数据以Json格式传会前端,由于公司特殊性吧,不能连外网(很苦比).所以只有等到晚上回家上网边查边写! public ...
- 如何使用Vue2做服务端渲染
花费了一个月时间,终于在新养车之家项目中成功部署了vue2服务端渲染(SSR),并且使用上了Vuex 负责状态管理,首屏加载时间从之前4G网络下的1000ms,提升到了现在500-700ms之间,SS ...
- TIME_WAIT问题总结
最近用http_load做压测,跑出来一大串"Cannot assign requested address "的错误,查了一下,是TIME_WAIT过多导致的.因为短时 ...
- CAS进行https到http的改造方案,结合cookie源码分析
先说具体的改造方案: 服务端: 一.CAS Server端的修改 1.找到cas\WEB-INF\deployerConfigContext.xml 对以下Bean增加参数p:requireSecur ...
- cuda事件的使用
cudaEvent_t start,stop; cudaEventCreate(&start);//创建事件 cudaEventCreate(&stop); cudaEventReco ...
- 解决Highcharts 5.0.7,IE8下bar类型图表无法显示的问题
引用如上, 当图标类型为bar时,IE8无法直接显示, 官网也一样, 但通过切换图例可以显示, 所以加入以下代码解决此问题 未经允许,严禁转载!!!
- 大数据学习记录之ssh绵密登录
1,在服务器端 ssh-keygen 2,使用ssh-copy-id 192.168.2.146 3,再测试一下ssh 192.168.2.146 exit 退出当前登录 具体流程为:A,B两台机器 ...
- XJOI练习2神奇的供水系统
神奇的供水系统 在游遍神秘岛过程中,Z4发现每一个小岛上都有若干个奇怪的类似小水缸似的立方体,这另到Z4相当迷惑不解!这天晚上,忽然下起了一场大雨,在中心岛小树屋上类似那个圆形石槽中间的小孔中涌出了一 ...
- new表达式如何创建对象
new表达式如何创建对象 前言 刚学java时曾一度认为,构造器中this指向是当前类型的对象,当我们调用new表达式时,由父类的构造器生成对象的一部分并初始化,然后再由子类的构造器补充成完整的对象并 ...