“如果我的旧 Python 2.7脚本无法在Abaqus 2024中运行怎么办?”
1、有两个方法来升级 Python 脚本。
1.1.自动升级您的脚本
abaqus python -m abqPy2to3 <files/directories>
请注意,“ abaqus ”命令取决于您的 Abaqus 2024 设置(例如 abq2024、abq24...)。此命令接受文件列表或目录列表(相对或绝对路径)。在后一种情况下,它将递归遍历所有子文件夹寻找Python文件(带有'py'扩展名) 。
在极少数情况下,自动升级实用程序可能无法按预期工作。例如,在涉及其他模块或库的复杂脚本中。这些 Python 程序需要用户进行一些手动干预。
1.2.手动升级您的脚本
print语句已被弃用,取而代之的是 print 作为函数。
Python
# Python 2 accepts both forms
print 'Hello World!' # print statement
print('Hello World!') # print function
# Python 3 only accepts print as a function
print('Hello World!')
复制
zip或dict.keys和dict.values等函数返回
Python
# Some data
px = [0.0, 0.5, 1.0]
py = [0.2, 0.6, 1.0]
# === Python 2 ===
points = zip(px, py) # List: [(0.0, 0.2), (0.5, 0.6), (1.0, 1.0)]
p1 = points[0] # Index list
p1, p2, p3 = points # Unpacking list
for x, y in points: # Iterate through the list
pass
# === Python 3 ===
points = zip(px, py) # Iterable: [(0.0, 0.2), (0.5, 0.6), (1.0, 1.0)]
# p1 = points[0] # Indexing is NOT allowed in iterables
p1 = list(points)[0] # Workaround: convert to list
# p1, p2, p3 = points # Unpacking iterable is NOT allowed
p1, p2, p3 = list(points) # Workaround: convert to list
for x, y in points: # Iterating is allowed in iterables
pass
Python 3 中的整数除法用//表示。整数 (a/b) 之间的常规除法总是会产生浮点数!请看下面代码片段中的第一个示例。
Python
# === Python 2 ===
print(8/3) # Output: 2
print(8./3) # Output: 2.66666666666667
print(8.//3) # Output: 2.0
# === Python 3 ===
print(8/3) # Output: 2.66666666666667
print(8./3) # Output: 2.66666666666667
print(8.//3) # Output: 2.0
2. 在 Abaqus 2024 中使用 Python 3
如果我们将 Python 3.10 与 Python 2.7 进行比较,我们会发现一些新功能将使我们的脚本更加实用和可读!
Python
# Example 1 - Basic usage
name = 'Peter'
hello = f'Hello {name}!'
print(hello)
# Output: Hello Peter!
# Example 2 - Format floats
from math import pi
print(f'pi = {pi:f.6}')
# Output: pi = 3.141596
# Example 3 - Inline operations
some_numbers = [2, 4, 8, 16]
print(f'The list contains {len(some_numbers)} items')
# Output: The list contains 4 items
# Example 4 - Debugging variables quick
var1 = 10
var2 = 4
var3 = False
var4 = -1e6
print(f'{var1 = }')
print(f'{var1 + var2 = }')
print(f'{var3 = }, {var4 = :g}')
# Output: var1 = 10
# var1 + var2 = 14
# var3 = False, var4 = -1e+06
# Example 5 - Some tricks with strings
title = 'Results'
print(f'{title:20}:')
print(f'{title:^20}:')
print(f'{title:-^20}:')
# Output: Results :
# Results :
# ------Results-------:
# ---End of file---
类型提示
这个话题对于 Python 用户来说听起来有点麻烦,因为 Python 是一种动态类型语言。这是否意味着我们从现在开始就必须指定数据类型?并不是这样的,我们不必这样做,但我们现在有这个选择。
调试。发现一些错误变得更加容易。 可读性和文档。如果我们读取函数所需的数据类型,就会更容易理解该函数的要求并追踪潜在的错误。 改进 IDE 和 linting 。如果您在 PyCharm、VS Code 或类似工具中进行编码,那么在使用类型提示时 IDE 将更加有帮助且响应更快。 写作前要三思。类型提示迫使您提前考虑您的程序:涉及的数据类型、功能方面(重载方法、多个返回类型)等。
Python
# Type hinting in a function
def myfunction(x: int) -> str:
return f"Message: {x + 5}"
# Type hinting of a variable
var: int = 10
print(myfunction(var))
# Output: Message: 15
数据类
Python
# Import required (decorator)
from dataclasses import dataclass
# Declaration of the dataclass
@dataclass
class importedPart:
file: str
dims: int = 3 # default value is 3 (3D)
info: str = "" # default value is empty
# Create object
mypart = importedPart(R"C:\CAD\bolt_M3x40.stp", 3, "Bolt M3x40")
print(mypart)
# Output: importedPart(file='C:\\CAD\\bolt_M3x40.stp', dims=3, info='Bolt M3x40')
结构模式匹配
# Option written by the user
option = 'new'
# Structural pattern matching
match option:
case 'new':
print('Creating new file')
case 'save':
print('Saving current file')
case other:
print('Unknown command: {other}')
# Output: Creating new file
还有更复杂的选项:
Python
# Option written by the user
option = 'open bolted_joint_4x3_M12'
# Structural pattern matching
match option.split():
case ['new', filename]:
print(f'Creating new file: {filename}')
case ['open', filename]:
print(f'Opening file: {filename}')
case ['quit'|'close']: # Matches ['quit',] or ['close',]
print('Bye bye!')
case _: # Matches anything else
print(f'Unknown command: {option!r}')
# Output: Opening file: bolted_joint_4x3_M12
通过使用类作为匹配模式、可变数量的参数,结构模式匹配更进一步。正如我们所看到的, Abaqus 2024 中引入的 Python 3.10 涉及我们的 Python 脚本中的一些重要更改。如有 必要,我们必须对其进行测试和升级。