• 跨语言学习的基本思路及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([字节数]) 读取整行,包括“ ” ,如果指定字节数,返回光标位置的指定长度的内容

    文件夹操作:
    需要引入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------------------------------------------------------------

         泛泛之谈,不值一哂,只为抛砖引玉。

  • 相关阅读:
    利用Event和MapFile进程共享信息
    基于不可靠数据报的文件传输
    Simple .NET code and memory profiler
    一步一步Asp.Net MVC系列_权限管理之权限控制
    新的起点,新的开始
    找工作的你需要了解和准备的东西
    我的大学读书生涯
    一步一步Asp.Net MVC系列_权限管理数据库与ViewModel篇
    一步一步asp.net_日志导航
    一步一步Asp.Net MVC系列_权限管理总结(附MVC权限管理系统源码)
  • 原文地址:https://www.cnblogs.com/cnDqf/p/6747295.html
Copyright © 2020-2023  润新知