当前位置:首页>python>HM/Tcl和ANSA/Python语法差异

HM/Tcl和ANSA/Python语法差异

  • 2026-09-22 16:25:13
HM/Tcl和ANSA/Python语法差异

HM/Tcl和ANSA/Python语法差异

老版本的HM采用的是Tcl语言,新版本同时兼顾Tcl和Python语言,但新版本HM侧重在新界面,好不习惯。
ANSA一直以来都是采用Python语言。
今天来介绍下HM/Tcl和ANSA/Python两种语言的差异

HM和ANSA类似命令举例:
HM命令*createmarkpanel,无法给你过滤单元类型,*createmark是可以过滤单元类型的
*createmarkpanel elems 1 "select elems"
set elems_id [hm_getmark elems 1]

ANSA命令base.PickEntities,可以给你过滤单元类型
import ansa
from ansa import *
deck = constants.ABAQUS
con_elems=base.PickEntities(deck,"CONNECTOR")
print(con_elems)

虽然第一接触的是HM/Tcl,也用了很长时间了,但ANSA/Python给我的感觉是更方便。

语法形式

# Tcl使用大括号来定义代码块
set age 10
if {$age > 18} {
  puts "You have voting rights"
} else {
  puts "You don't have voting rights"
}

# Python使用冒号和缩进来定义代码块
age = 10
if age > 18:
  print("你有投票权利")
else:
  print("你没有投票权利")
# Python还支持中文输出

变量申明

# Tcl通过set来申明变量
set a 10
set b 3.14
set c "Hello CCCAE"
set d {1 2 3}

# Python通过“=”来申明变量
a = 10
b = 3.14
c = "Hello CCCAE"
d = [1,2,3]

数据类型

# Tcl有列表、字典等数据类型,但个人觉得都可以当成字符串处理
set a {1 2 3 4 5}
set b [lindex $a 2]
puts $b
===>3

set my_dict {name 'CCCAE' age 18}
puts $my_dict
set my_dict_name [dict get $my_dict name]
puts $my_dict_name
===>CCCAE
# 看着好像还是字符串

# Python有列表list,元组turple,字典dict,集合set等数据类型,且是严格区分
a = [1,2,3,4,5]
b = a[2]
print(b)
===>3

my_dict = {'name':'CCCAE','age':18}
print(my_dict.get('name'))
===>CCCAE

控制结构

# Tcl有if、elseif、else关键字来创建控制结构
if {表达式1} {
  语句块1
} elseif {表达式2} {
  语句块2
} elseif {表达式3} {
  语句块3
} ......
} else {
  语句块n
}

# Python有if、elif、else关键字来创建控制结构
if 表达式1:
  语句块1
elif 表达式2:
  语句块2
elif 表达式3:
  语句块3
......
else:
  语句块n

循环结构

# Tcl主要有for、while和foreach循环结构
for {set a 1} {$a <= 5} {incr a} {
  puts "$a"
}

set a 1
while {$a <= 5} {
  puts $a
  incr a
}

set a {1 2 3 4 5}
foreach b $a {
  puts $b
}


# Python主要有for和while循环结构
for a in range(1,6):
  print(a)

a = 1
while a <= 5:
  print(a)
  a += 1

# 上述所有结果是一样的,1,2,3,4,5

函数定义

# Tcl使用proc来定义函数
proc plus {a b} {expr {$a + $b}}
set c [plus 1 2]
puts $c

# Python使用def来定义函数
def plus(a,b):
  return a + b
c = plus(1,2)
print(c)

错处处理

# Tcl采用catch来处理
# 作者在HM/Tcl常用的语法,因为有时可能就没有comps
catch {*createmark comps 1 "all"}
catch {*deletemark comps 1}

# Python采用try、except、finally来处理
# 作者目前还没怎么用到过
try:
  a = 1 / 0
except ZeroDivisionError:
  print("除数不能为0")

导入加载模块包

# Tcl采用source来导入加载模块
source 路径/脚本文件.tcl

# Python采用import来导入加载模块,写ANSA脚本第一步就是导包
import ansa
from ansa import base

注释

# Tcl只有单行注释#
# 这是一个Tcl注释

# Python有单行注释#,多行注释''''''或""""""
# 这是一个Python单行注释
'''
这是多行注释,可用于表头
文件名:
日期:
作者:
'''

以上仅代表个人观点,供参考!

推荐阅读

HyperMesh/Tcl与ANSA/Python的开发环境
如何加密HyperMesh的tcl和ANSA的python脚本

最新文章

随机文章