2 votos

Pregunta sobre la calculadora de campo Python else statement

El siguiente bloque de código se ejecuta en el Campo1 y calcula que el Campo1 es igual al Campo2 si no son iguales. Si no, devuelve el Campo1. Mi pregunta es si la sentencia else realmente recalcula el Campo1 para que sea igual a sí mismo o si deja el Campo1 como está. Básicamente, si Field1 es igual a Field2, no quiero que Field1 se recalcule a sí mismo.

def update(Field1,Field2):
  if Field1 != Field2:
    return Field2
  else:
    return Field1

2voto

fev16 Puntos 26

El valor de retorno sólo se establecerá en el campo que se está calculando. Cualquier campo que se utilice para calcular ese valor no se modifica.

En el ejemplo siguiente, sólo se cambiaría el campo SHORT_NAME.

Esto también fijará todos los registros del campo, tanto si el valor es el mismo como si no.

  • Así que supongo que más a su pregunta, si usted está estableciendo los valores de campo1 y su función devuelve el valor del campo1, simplemente estará calculando el nuevo valor con el antiguo.

  • Tal vez su función es sólo para mostrar un ejemplo trival, pero parece que pero parece que se podría acortar a establecer el campo 1 directamente en el campo 2.

enter image description here

2voto

Steve Puntos 11

La respuesta es sí, tal y como está escrito se está realizando una operación en cada registro. No me he metido en python todavía, así que no sé si hay una opción de "no hacer nada" - como Ian señaló, sin el else se anularán los valores. Veo dos posibles soluciones que son más o menos lo mismo si no hay una opción de "no hacer nada". La primera es comprobar la equivalencia primero, fuera del comando de cálculo de campo en lugar de dentro de él. Del mismo modo, el cálculo de campo puede ejecutarse sólo en los registros seleccionados, por lo que podría seleccionar todos los registros en los que no son iguales y luego calcular F1 a F2 sólo en ese conjunto. Según mi comentario, no sé cuáles son los impactos reales en el tiempo de procesamiento y si serían significativos entre sólo actualizar todo y tratar de modificar sólo lo que realmente necesita ser cambiado.

1voto

Matej Badin Puntos 31

Por lo que sé, la calculadora de campo sólo actualiza el campo que se quiere calcular (normalmente se inicia la calculadora de campo con el botón derecho del ratón sobre el campo que se quiere recalcular y ahí es donde se dirige el valor de retorno). Lo mismo cuando inicias la calculadora de campos usando la expresión de arcpy calcularCampo_gestión.

1voto

Tom Puntos 1944

Creo que la respuesta a su pregunta es . Tu código dice que devuelva el Campo1 si el Campo1 es igual al Campo2, por lo que está reasignando esos mismos valores al Campo1. Sin embargo, esto no debería ser un problema, no creo.

Estoy de acuerdo con ian en que se podría omitir la sentencia else, y entonces no se estaría reasignando.

También asumo que realmente pusiste en la ventana inferior de la calculadora de campos (debajo del bloque de código) donde diría "Campo1 = "

update( !Field1!, !Field2!)

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