Lo que está viendo es un Cálculo de Campo Avanzado.
Es un poco confuso porque estás haciendo una especie de referencia al revés. Si hace clic con el botón derecho del ratón en un campo de una tabla de atributos y selecciona la calculadora de campos, observará una opción en la ventana de la calculadora de campos para cambiar el analizador sintáctico a Python, así como una casilla de verificación denominada "Mostrar bloque de código". Cuando está marcada, la casilla "Mostrar bloque de código" le permite realizar un cálculo de campo avanzado definiendo una función personalizada y utilizando esa función para calcular los valores del campo.
Su bloque de código iría en la sección de código pre-lógico script como una función personalizada. Su Expresión iría en la sección de Expresión de Cálculo de Campo debajo de eso (En mi caso: Site_ID =)
![enter image description here]()
Así que crossing(), tal como se define en la ventana de código de Pre-Logic script, es una función que toma dos parámetros, crosses y row_score.
En la segunda ventana, los parámetros (crosses y row_score) se están pasando a la función crossing() mediante los valores de los campos "CROSS_ROW" y "ROW_SCORE", respectivamente, para cada registro de la tabla de atributos.
Así que en esta función se ejecutará la función crossing() contra cada valor del campo 'Site_ID'. Si el valor contenido en el campo "CROSS_ROW" para ese registro en particular no es igual a 0, se devolverá un valor de 5 y se rellenará en el campo 'Site_ID' para ese registro. En caso contrario, si el valor del campo "CROSS_ROW" no es igual a 0 (!=), se devolverá el valor del campo "ROW_SCORE" y se introducirá en el campo 'Site_ID' de ese registro.
EDITAR: Para responder mejor a tu pregunta: encapsular algo entre signos de exclamación significa que se encapsula el valor del campo llamado como sea. Por lo tanto, el valor del campo llamado "CROSSES" para este registro. La razón por la que todo está entre comillas es porque quien escribió esto probablemente estaba haciendo esto a través de ESRI's ArcPy Site Package que requeriría que estas expresiones y bloques de código se pasaran como una cadena.
0 votos
No estoy familiarizado con Arcpy, pero el
!
debe ser específico para él o para Arcgis. No es una sintaxis válida de Python.0 votos
Y porque los signos de exclamación no son código Python, yo diría que el paquete Arcpy post-procesa estas cadenas antes de ejecutar el resultado como código Python.
0 votos
Por eso no puedo encontrar nada en los foros de python, gracias al menos ya se donde buscar :)
4 votos
Tal vez esto Página de documentación de ArcGIS 9.3 ayuda:
Fields are always enclosed in exclamation points ! ! for Python.