Python3 与 NetCore 基础语法对比(就当Python和C#基础的普及吧)

本文详细介绍Python编程的基础知识,包括变量定义、数据类型转换、条件语句、循环结构等内容,并对比了与其他语言的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Jupyter排版:https://www.cnblogs.com/dotnetcrazy/p/9102030.html

汇总系列:https://www.cnblogs.com/dunitian/p/4822808.html#ai

VSCode设置python3的开发环境(linux下默认是python2)https://www.cnblogs.com/dotnetcrazy/p/9095793.html

在线演示http://nbviewer.jupyter.org/github/lotapp/BaseCode/blob/master/python/notebook/1.POP/1.base/01.helloworld.ipynb

欢迎提出更简单的语法~(文章中案例有两个福利哦,一个是养生,一个是人工智能[ 密码:fqif])

复习C#基础请看附录2:https://www.cnblogs.com/dotnetcrazy/p/9102030.html#csharp

先说下感觉,python的编程有点JavaScript的感觉(比如:'和“有时候不区别),又感觉像外国版的易语言,整个过程像读书一样,比如一个元素不在列表之中==> for item not in lists。使用它做个大点的项目一定要先规定好编程风格,不然能让人崩溃的。先不深究,后面会继续深究。。。(Python2我就不讲了,官方推荐使用Python3

0.命名规则

Python官方是推荐使用_来间隔单词,但一般开发人员都是以各自主语言的命名来定义的,这个就各人爱好了,不过团队一定要统一。

标示符字母、下划线和数字组成,且数字不能开头(这个基本上都一样)注意标识符是区分大小写的

命名规则,总的原则就是见名知意,一般都是驼峰命名法,纯Python的话推荐用_连接单词

 扩充:Python的关键词可以自己打印一下:

['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

1.注释

python:#注释一行三个单引号或者三个双引号注释多行'''XXX'''或者"""XXXX"""(一般用#就够了,有点像shell脚本的感觉)

python输出就直接print即可,C是printf(不要搞混哦)

C、Java、Net都是//注释一行,/**/注释多行

2.变量

 python定义变量比较牛逼,直接写变量名即可,句子后面不用加分号,eg:name="小明"

netcore,可以用var来进行类型推断,eg:var name="小明";

3.输入输出:r''表示''内部的字符串默认不转义

换行输出,不换行输出:(\n使用这个就不说了,它们和C都是一样的)

python:print("dnt.dkill.net/now",end='') #默认end='\n' (' 和 " 随意)

netcore: Console.Write Console.WriteLine

-------------------------------------------------------------------------------------

python输出多个重复字符,不需要自己手打N个*或者for循环输出多个重复字符,eg:print("x"*10)

如果你不太确定应该用什么,%s永远起作用,它会把任何数据类型转换为字符串

# %c    字符
# %s    通过str() 字符串转换来格式化
# %o    八进制整数
# %x    十六进制整数(小写字母)
# %X    十六进制整数(大写字母)
# %e    指数(小写'e')
# %E    指数(大写“E”)
# %f    浮点实数
# %g    %f和%e 的简写
# %G    %f和%E的简写

下面来个输入输出的简单的案例吧:打印一张名片,Name:毒逆天,Gender:男

Python:print("Name:%s,Gender:%s"%(name,gender))【注意引号后面没有,哦】

NetCore:Console.WriteLine($"Name:{name},Gender:{gender}");

4.类型转换+算术运算符

python:类型(值),eg:int(),long(),float(),str()...等等(Python没有double类型哦~)【:转换成16进制:hex()、转换为8进制:oct()

netcore:该案例推荐使用 int.TryParse,我这边就用常用的Convert系列了【支持类型比较多】

Convert.ToInt64(),Convert.ToDouble(),Convert.ToString()

算术运算符编程语言基本上差不多,Python多了个 // 取商(%是取余)和 幂**,来个案例:

netcore(C#常用数学方法都在Match类中)

+= -= *= /= %= **= //= 这些就不用详说了吧?(举个例子: c += a 等效于 c = c + a

5.if else

 说Python像外国版的易语言,这边就可以看出来一点了,先说说Python的逻辑运算符==》andornot,这个倒是跟C、C#、Java等大大不同,如果再结合Python命名规则就感觉在阅读文章一样

 关系运算符和其他语言基本上差不多(== != <> > < >= <=),就一点不一样:也可以用<>

来个if else基础语法:括号可加可不加,但是记得加:。不用大括号,但是if里面的代码注意缩进

netcore:if或者else下面是单行代码可以不用写括号

再来个嵌套的:注意哦~else if 在python里面简写成了:elif

netcore:单行代码可以不用写括号

6.while

 直接来个案例:

python里面没有++ 和 --,这点的确用的有点小不方便,扩展部分有相关说明

netcore

 

7.for

 python的for循环,类似于js里面的for in 以及C#里面的foreach

netcore: foreach (var i in name)

------------------------------------------------------------------------------------------------------

老规矩,来个扩展:switch(这个目前不用掌握,看看就好,后面会继续探讨的)

Python没有 ++/--  参考文章(点我)

python 中,变量是以内容为基准而不是像 c 中以变量名为基准,所以只要你的数字内容是5,不管你起什么名字,这个变量的 ID 是相同的,同时也就说明了 python 中一个变量可以以多个名称访问

如上例,a 和 b 都是 5,当你++改变了 a 时,b 也会跟着变,这当然不是我们希望的。so,正确的自增操作应该  a += 1,通过 id() 观察可知,id 值变化了,即 a 已经是新值的名称


 for的扩展(一般不太用)官方参考:https://docs.python.org/3/reference/compound_stmts.html#the-for-statement

图片出处:https://www.cnblogs.com/dspace/p/6622799.html


Python 没有 switch / case 语句。为了实现它,我们可以使用字典映射:

def numbers_to_strings(argument):
    switcher = {
        0: "zero",
        1: "one",
        2: "two",
    }
    return switcher.get(argument, "nothing")

这段代码类似于:

function(argument){
    switch(argument) {
        case 0:
            return "zero";
        case 1:
            return "one";
        case 2:
            return "two";
        default:
            return "nothing";
    };
};
在 Python 中字典映射也可以包含函数或者 lambda 表达式
def zero():
    return "zero"
 
def one():
    return "one"
 
def numbers_to_functions_to_strings(argument):
    switcher = {
        0: zero,
        1: one,
        2: lambda: "two",
    }
    func = switcher.get(argument, lambda: "nothing")
    return func()

类的调度方法:

如果在一个类中,不确定要使用哪种方法,可以用一个调度方法在运行的时候来确定。

    class Switcher(object):
    def numbers_to_methods_to_strings(self, argument):
        method_name = 'number_' + str(argument)
        method = getattr(self, method_name, lambda: "nothing")
        return method()
 
    def number_0(self):
        return "zero"
 
    def number_1(self):
        return "one"
 
    def number_2(self):
        return "two"

https://docs.python.org/3.6/faq/design.html#why-isn-t-there-a-switch-or-case-statement-in-python

 Python设计相关的为什么,可以参考官方文档:https://docs.python.org/3.6/faq/design.html

附录2:C#基础(逆天上学那会做的笔记)

易忘知识点(点)

C#基础汇总(点)

异常概况系(点)

CodeBase ~ POP

CodeBase ~ OOP

<think>我们正在讨论Python无法直接读取DWG文件的原因及解决方案。根据引用内容,我们可以总结以下关键点:原因:1.**DWG文件格式的专有性复杂性**:DWG是AutoCAD的私有文件格式,其详细规范未公开,因此第三方库难以直接解析。引用[1]提到“不同版本cad的dwg文件的格式标准不同”,这增加了直接解析的难度。2.**Python库的限制**:引用[1]中提到,尝试用Python的dxfwrite库生成DXF文件(一种更通用的格式)时,遇到了兼容性问题,且无法读取图像。同时,使用dxfgrabber库进行读取时,兼容性不好,文档不全。解决方案:1.**通过中间格式转换**:将DWG转换为更通用的格式(如DXF)后再用Python处理。但引用[1]指出,使用Python库处理DXF时仍存在兼容性功能限制。2.**使用其他语言的库**:引用[1]提到,使用C#调用netdxf库可以较好地实现DXF文件的读写绘图,功能更全面。3.**使用专门的转换工具**:引用[3]提到,可以使用Aspose.CADforJava这样的专业库进行转换(例如DWG转PNG),然后在Python中处理转换后的文件。4.**Web预览解决方案**:引用[2]提到,在Web环境中预览DWG需要解决解析复杂性浏览器兼容性问题,这通常需要专门的库或服务。因此,我们可以整理出以下回答:###Python无法直接读取DWG文件的原因1.**专有格式**:DWG是AutoCAD的私有二进制格式,其规范未公开,且不同版本间存在差异,导致第三方解析困难[^1]。2.**缺乏完善的Python库**:现有的Python库(如`dxfgrabber`)对DXF文件的读取兼容性不佳,且文档不全,而直接解析DWG的Python库几乎不存在[^1]。###解决方案1.**格式转换**:-使用AutoCAD或其他专业软件将DWG转换为DXF(文本格式),再用Python的`dxfgrabber`等库读取。但需注意兼容性问题[^1]。-使用转换工具(如Aspose.CAD)将DWG转换为PNG等图像格式,然后在Python中处理图像[^3]。2.**跨语言调用**:-使用C#等语言调用功能更完善的库(如`netdxf`)处理DWG/DXF文件,然后通过Python调用C#程序(例如使用Python的`subprocess`模块或.NETCore的跨平台特性)[^1]。3.**Web服务方案**:-对于Web环境,使用专门的转换服务将DWG转换为可在浏览器中显示的格式(如SVG、PNG)[^2]。###代码示例(转换后的DXF读取)如果已获得DXF文件,可尝试以下Python代码:```pythonimportdxfgrabber#读取DXF文件dxf=dxfgrabber.readfile("example.dxf")#获取所有图层layers=dxf.layers#获取所有实体entities=dxf.entities```但需注意,`dxfgrabber`对复杂DXF文件的兼容性可能有限[^1]。###推荐方案对于稳定可靠的需求,建议采用**转换+跨语言调用**:1.使用AutoCAD或转换工具(如Aspose.CAD)将DWG转换为DXF/PNG。2.若需直接操作DWG,考虑用C#编写处理模块,由Python调用。§§相关问题§§1.如何用Python调用C#编写的DWG处理程序?2.除了DXF,还有哪些中间格式适合转换DWG文件?3.有哪些开源的DWG解析库(不限语言)?</think>### Python 无法直接读取 DWG 文件的原因及解决方案 #### 一、无法直接读取的原因 1. **专有二进制格式** DWG 是 AutoCAD 的私有二进制格式,其规范未公开[^1]。不同版本的 DWG 文件结构差异大(如 AutoCAD 2000/2007/2018 格式不同),导致第三方解析困难。 2. **格式复杂性** DWG 文件包含图形、图层、标注、实体属性等复杂结构[^2],需要专业工具解析。Python 缺乏原生支持此类复杂 CAD 格式的库。 3. **法律限制** Autodesk 对 DWG 格式实行严格的知识产权保护,未经授权直接解析可能涉及法律风险[^1]。 4. **技术门槛高** 解析 DWG 需要处理压缩数据、对象句柄、空间索引等底层结构,开发难度远超常规文件格式[^2]。 #### 二、解决方案 以下方案按实施难度排序: ##### 方案 1:转换为中间格式(推荐) ```mermaid graph LR DWG[DWG文件] --> 转换工具--> DXF[通用格式 DXF] --> Python处理 ``` - **工具选择**: - **专业软件**:使用 AutoCAD 或免费工具(如 [ODA File Converter](https://www.opendesign.com/guestfiles/oda_file_converter))批量转换 DWG → DXF - **Python 库**: ```python # 示例:使用 aspose-cad 转换(需许可证) import aspose.cad as cad image = cad.Image.load("input.dwg") image.save("output.dxf") ``` - **优势**:DXF 是开放的 ASCII 格式,可用 `dxfgrabber` 库直接读取: ```python import dxfgrabber dxf = dxfgrabber.readfile("output.dxf") print("图层:", [layer.name for layer in dxf.layers]) ``` ##### 方案 2:使用专业解析库 - **跨语言方案**: - C# 调用 `netDxf` 库(.NET 平台)解析 DWG,通过 Python 的 `pythonnet` 调用: ```python import clr clr.AddReference("netDxf") from netDxf import DxfDocument doc = DxfDocument.Load("input.dwg") for entity in doc.Entities: print(entity.Type) ``` - **纯 Python 方案**: - `pywin32` + AutoCAD COM 接口(需安装 AutoCAD): ```python import win32com.client acad = win32com.client.Dispatch("AutoCAD.Application") doc = acad.Documents.Open("d:\\path\\file.dwg") # 遍历模型空间对象 for entity in doc.ModelSpace: print(entity.EntityName) ``` ##### 方案 3:Web 预览技术 适用于浏览器环境[^2]: 1. 服务端用 C++/C# 解析 DWG 2. 转换为 SVG/PNG 等 web 兼容格式 3. Python 后端使用转换结果: ```python # Flask 示例 from flask import send_file @app.route(&#39;/preview&#39;) def dwg_preview(): convert_to_png("design.dwg") # 调用转换服务 return send_file("design.png") ``` #### 三、方案对比 | 方案 | 开发难度 | 依赖环境 | 功能完整性 | |---------------------|----------|----------------|------------| | DWG → DXF 转换 | ★☆☆☆☆ | 转换工具 | 高 | | C# netDxf + Python | ★★★☆☆ | .NET Runtime | 极高 | | AutoCAD COM 接口 | ★★☆☆☆ | AutoCAD 安装 | 完整 | | Web 预览 (PNG/SVG) | ★★★★☆ | 转换服务 | 只读 | > **推荐选择**: > - 简单需求:转换 DXF + `dxfgrabber` > - 复杂操作:C# `netDxf` + Python 混合开发 > - 无桌面环境:Web 服务转换方案
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值