跨语言学习的基本思路及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 ...
随机推荐
- Springboot启动源码详解
我们开发任何一个Spring Boot项目,都会用到如下的启动类 @SpringBootApplication public class Application { public static voi ...
- 3384/1750: [Usaco2004 Nov]Apple Catching 接苹果
3384/1750: [Usaco2004 Nov]Apple Catching 接苹果 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 18 Solv ...
- 列表总结Canvas和SVG的区别
参考链接: 菜鸟教程 HTML5 内联SVG 经典面试题(讨论canvas与svg的区别) Canvas | SVG ---|--- 通过 JavaScript 来绘制 2D 图形|是一种使用 XML ...
- Windows定时计划执行Python
先看下定时执行的py文件 #coding:gbk from selenium import webdriver import time,os driver = webdriver.PhantomJS( ...
- java基础之基础语法详录(一)
[前言] java的语法先从基础语法学,Java语言是由类和对象组成的,其对象和类又是由方法和变量组成,而方法,又包含了语句和表达式. 对象:(几乎)一切都是对象,比如:一只熊猫,他的外观,颜色,他在 ...
- Caliburn.Micro - 框架搭建
简介:Caliburn.Micro是Caliburn的一个轻量级版本开源架构,可以用于wpf,sliverlight,wp7等,和注重模块化的Prism比起来也有许多优点,具体比较可以参考 此文 ht ...
- ViewPager 滑动一半的判断方法以及左滑右滑判断
做项目的时候,会碰到用viewpager + fragments去实现多页滑动.有些时候需要完成:界面在滑动到一半或是一半以上的时候,需要把title之类的切换到下一个页面.这个时候仅仅依赖Viewp ...
- android 关于表格布局的认识
表格布局(TableLayout) 使用的知识点有: 控件 TableRow:为这个表格添加一行 table的特殊属性 android:layout_column:确定此表格的列数 android:s ...
- 使用Func<>和Action简化委托
/// <summary> /// 入口 /// </summary> public void Run() { TestDelegate t = test; t(); Acti ...
- WPF实用小工具
Kaxaml 一款轻量级的Xaml代码编辑器,提供了可视的效果可以看到修改代码后的实时效果图.个人习惯于用它测试系统默认控件的行为和布局,小片段的xaml也可以拿到这个工具上测试效果.这款工具还提供了 ...