7 votos

¿Significado del signo de exclamación en el analizador de Python del Calculador de Campo ArcGIS?

En la siguiente línea, no entiendo qué significan esos signos de exclamación ¿Y por qué ponerlo todo entre comillas? No entiendo el propósito de la expresión variable, por favor explíqueme ya que soy nuevo en la pitón.

expression = "crossing(!CROSS_ROW!,!ROW_SCORE!)"

codeblock = """def crossing(crosses, row_score):
            if crosses != 0:
                return 5
            else:
                return row_score"""

El código da una puntuación a las tuberías (de la capa de tuberías) que se cruzan, o que pasan junto a las carreteras (de la capa de carreteras) dependiendo de la anchura de la carretera. este fue el bloque de código que asignó una puntuación de 5 si la tubería se cruza.

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 :)

12voto

Moritzplatz Puntos 757

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

Muchas gracias, ahora más o menos lo entiendo, de hecho he utilizado este mismo bloque en un script mayor para cambiar el resultado final en caso de intersección.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X