Ejecución de una función sin llamarla

Tratando el tema de las funciones decoradoras, se ejecuta la función sin llamarla.

Código:

def funcion_decoradora(funcion_parametro):     def funcion_interior():          # Acciones adicionales que decoran         print("Vamos a realizar un cálculo:")         funcion_parametro()          # Acciones adicionales que decoran         print("Hemos terminado el cálculo")      return funcion_interior()  @ funcion_decoradora def suma():     print(15+20)  @ funcion_decoradora    def resta():     print(30-10) 

El resultado es el siguiente:

Vamos a realizar un cálculo: 35 Hemos terminado el cálculo Vamos a realizar un cálculo: 20 Hemos terminado el cálculo 

Sin embargo, si mi código es el siguiente:

def funcion_decoradora(funcion_parametro):     def funcion_interior():          # Acciones adicionales que decoran         print("Vamos a realizar un cálculo:")         funcion_parametro()          # Acciones adicionales que decoran         print("Hemos terminado el cálculo")      return funcion_interior()  @ funcion_decoradora def suma():     print(15+20)  @ funcion_decoradora    def resta():     print(30-10)   suma() resta() 

El resultado es:

Vamos a realizar un cálculo: 35 Hemos terminado el cálculo Vamos a realizar un cálculo: 20 Hemos terminado el cálculo Traceback (most recent call last):   File "/practica_decoradores.py", line 28, in <module>     suma() TypeError: 'NoneType' object is not callable 

¿Alguien sabría porque ocurre esto? Muchas gracias de antemano Saludos

¿Còmo optimizar tiempo de ejecución de un script?

Buenos días cordial saludo, espero se encuentren bien la siguiente es para consultarles si conocen alguna forma de mejorar este script en cuestión de tiempo de procesamiento, ya que se me tarda hasta media hora en procesar la información, he descubierto que quien me rentaliza el proceso es la función all() entonces quería consultarles si existe otra forma a nivel computacional de mejorar dicho rendimiento del script, esas condiciones de all() me permiten filtrar una serie de listas que tienen condiciones particulares (si es toda negativa o toda positiva o si tiene cambios de signo) agradezco enormemente su colaboración.

for j in range(0,len(zmeshmesh)):     Bmeshaux=[]     Bmeshauxred=[]     Bmeshauxholg=[]     for r in range(len(zmeshmesh[j])):         zmeshiter=[]         zmeshiterred=[]         zmeshiterholg=[]         for m in range(len(zd[j])):             zmeshiter.append(zmeshmesh[j][r]-zd[j][m]) #normalizando vector de cada estación con los 3 mètodos             zmeshiterred.append(zmeshmeshred[j][r]-zd[j][m])             zmeshiterholg.append(zmeshmeshholg[j][r]-zd[j][m])             for i in range(0,len(zmeshiter),1): #ciclo para identificar cambio de signo en normalizada                 if (all(x > 0 for x in zmeshiter)) or (all(x < 0 for x in zmeshiter)):                     yi,yf=0,0                 if (zmeshiter[i]>=0 and zmeshiter[i-1]<0):                     start=i                     try:                         yi=round((zmeshmesh[j][r]-zd[j][start])*((yd[j][start-1]-yd[j][start])/(zd[j][start-1]-zd[j][start]))+yd[j][start],2)                     except:                         yi=round((zmeshmesh[j][r]-zd[j][start])*((yd[j][start-2]-yd[j][start])/(zd[j][start-2]-zd[j][start]))+yd[j][start],2)                     if (all(s>0 for s in zmeshiter[start::])):                         yi=0                 if (zmeshiter[i]<=0 and zmeshiter[i-1]>0):                     end=i                     try:                         yf=round((zmeshmesh[j][r]-zd[j][end])*((yd[j][end-1]-yd[j][end])/(zd[j][end-1]-zd[j][end]))+yd[j][end],2)                     except:                         yf=round((zmeshmesh[j][r]-zd[j][end])*((yd[j][end-2]-yd[j][end])/(zd[j][end-2]-zd[j][end]))+yd[j][end],2)                     if all((s>0 for s in zmeshiter[0:end])):                         yf=0 

¿Cómo parar ejecución en JavaScript?

Necesito un poco de ayuda en el código he puesto donde tengo el problema. Al mostrar esa ventana de error en vez de parar la ejecución pues sigue hasta que guarda el registro y necesito que se pare, he probado a poner break, exit, return false… siempre continua con la ejecución. Simplemente que cuando muestre la ventana de error se quede en la pantalla actual y no haga nada mas para que ya el usuario realice el cambio oportuno para corregir ese error. Gracias por la ayuda!

function validarFechaHora50minutos(campo){     alert ("Entro en validarFechaHora50minutos ");      var fechaValidar = campo;     var fecha     = getServerDate();     var tiempo    = fecha.getTime();     var total     = fecha.setTime(parseInt(tiempo)+3000000); //Equivale en msg a 50 minutos     var dia       = fecha.getDate();     var mes       = fecha.getMonth();     var anio      = fecha.getYear();     var hora      = fecha.getHours();     var minutos   = fecha.getMinutes();      var minutosAct = parseInt(minutos);     if (minutosAct < 10) {         minutos = "0" + minutosAct;     } else {         minutos = minutosAct;     }      var horaAct = parseInt(hora);     if (horaAct < 10) {         hora = "0" + horaAct;     } else {         hora = horaAct;     }      var diaAct = parseInt(dia);     if (diaAct < 10){         dia = "0" + dia;     }else{         dia = dia;     }      var mesAct = parseInt(mes)+1;     if (mesAct < 10){         mes = "0" + mesAct;     }else{         mes = mesAct;     }       var fecha50 = dia + "/" + mes + "/" + anio + " " + hora + ":" + minutos;     alert(fechaValidar);     alert(fecha50);// muestra la fecha actual mas los 50 minutoss      if (!fecha50 == "" && !fechaValidar == "") {         var date1 = Date.parse(fecha50);         var date2 = Date.parse(fechaValidar);         alert("Despues del parseo quedan asi las fechas" + date1 +"--"+ date2);         if (date1 <= date2) {             return true;         } else {             mostrarVentanaError("Han transcurrido más de 50 minutos desde la fecha de inicio prevista.");             return false;         }     } else {         return true;     }       /* if(!esFechaHoraAnterior50Min(fecha50, fechaValidar)) {         mostrarVentanaError("Han transcurrido más de 50 minutos desde la fecha de inicio prevista.");     }                        */   } 

Problema con ejecución de funciones

Actualmente estoy haciendo una librería y quisiera saber el porque al momento de llamar mis funciones me las remplaza y solo pone los datos o la información que le doy de la ultima función declarada, la única que me respeta es la función base que es stStyle pero si le agrego las demás pasa ese error y solo ejecuta la ultima.

CODIGO

function styleTxt (selector) {   const obj = {     getElement (selector) {       return document.querySelector(selector)     },     stStyle (color, bgColor) {       document.onmouseup = function () {         if (window.getSelection().toString().length > 0) {           window             .getSelection()             .getRangeAt(0)             .surroundContents(createSpanTag())           const selectedElement = document.getElementById(`stElement$  {auto}`)           selectedElement.style.color = color           selectedElement.style.backgroundColor = bgColor           window.getSelection().removeAllRanges()           auto++         }       }       return this     },     stSize (ftSize) {       document.onclick = () => {         const selectedElement = document.getElementById(`stElement$  {auto - 1}`)         selectedElement.style.fontSize = `$  {ftSize}px`       }       return this     },     txtBold () {       document.onclick = () => {         const selectedElement = document.getElementById(`stElement$  {auto - 1}`)         selectedElement.style.fontWeight = 'bolder'       }       return this     },     stBorder () {       document.onclick = () => {         const selectedElement = document.getElementById(`stElement$  {auto - 1}`)         selectedElement.style.border = '5px solid black'       }       return this     }   }    return obj } 

EJEMPLO

styleTxt('#element').stStyle('white', 'orange').stSize(20).txtBold().stBorder() 

time.sleep No detiene la ejecución de una instrucción

Tengo el siguiente problema, en el siguiente código dentro de la funcion Finish(), necesito que despues de 3 segundos se efectué una operación para ello utilize time.sleep(3) para detener la ejecución de la próxima instrucción el problema es que no deja actuar las instrucciones anteriores a la declaración de time.sleep()

def Finish(self,signal):         if signal == 0:              self.Animacion.setPixmap(QtGui.QPixmap("ok.png")) #No se ejecuta la acción si esta time.sleep()             time.sleep(3)             self.tabWidget.setCurrentIndex(1) 

En este caso no deja que self.Animacion.setPixmap() se ejecute

Codigo completo:  from PyQt5.QtWidgets import QMainWindow,QApplication,QTabWidget,QPushButton,QLabel from PyQt5 import QtCore,QtGui from PyQt5 import uic import threading import time  class TheThread(threading.Thread):     def __init__(self,obj,fun):         threading.Thread.__init__(self)          self.obj = obj         self.fun = fun      def run(self):         self.fun() class Main(QMainWindow):     signal = QtCore.pyqtSignal(object)     def __init__(self):         QMainWindow.__init__(self)         uic.loadUi("Test.ui",self)          self.Iniciar.clicked.connect(lambda:self.ShowImage())          self.signal.connect(self.Finish)      def ShowImage(self):         _movie = QtGui.QMovie("Loader.gif")         self.Animacion.setMovie(_movie)         self.Animacion.setScaledContents(True)         _movie.start()          _thread = TheThread(self,self.Fun1)         _thread.start()      def Fun1(self):         time.sleep(3)         self.signal.emit(0)      def Finish(self,signal):         if signal == 0:              self.Animacion.setPixmap(QtGui.QPixmap("ok.png")) #No se ejecuta la acción si esta time.sleep()             time.sleep(3)             self.tabWidget.setCurrentIndex(1)   app = QApplication([]) m = Main() m.show() app.exec_()   

Archivo.ui

<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0">  <class>MainWindow</class>  <widget class="QMainWindow" name="MainWindow">   <property name="geometry">    <rect>     <x>0</x>     <y>0</y>     <width>800</width>     <height>600</height>    </rect>   </property>   <property name="windowTitle">    <string>MainWindow</string>   </property>   <widget class="QWidget" name="centralwidget">    <widget class="QTabWidget" name="tabWidget">     <property name="geometry">      <rect>       <x>30</x>       <y>0</y>       <width>691</width>       <height>441</height>      </rect>     </property>     <widget class="QWidget" name="tab">      <attribute name="title">       <string>Tab 1</string>      </attribute>      <widget class="QLabel" name="Animacion">       <property name="geometry">        <rect>         <x>220</x>         <y>40</y>         <width>231</width>         <height>171</height>        </rect>       </property>       <property name="text">        <string>TextLabel</string>       </property>      </widget>      <widget class="QLabel" name="Estatus">       <property name="geometry">        <rect>         <x>220</x>         <y>270</y>         <width>271</width>         <height>16</height>        </rect>       </property>       <property name="text">        <string>TextLabel</string>       </property>      </widget>     </widget>     <widget class="QWidget" name="tab_2">      <attribute name="title">       <string>Tab 2</string>      </attribute>     </widget>    </widget>    <widget class="QPushButton" name="Iniciar">     <property name="geometry">      <rect>       <x>30</x>       <y>460</y>       <width>75</width>       <height>23</height>      </rect>     </property>     <property name="text">      <string>PushButton</string>     </property>    </widget>   </widget>   <widget class="QMenuBar" name="menubar">    <property name="geometry">     <rect>      <x>0</x>      <y>0</y>      <width>800</width>      <height>21</height>     </rect>    </property>   </widget>   <widget class="QStatusBar" name="statusbar"/>  </widget>  <resources/>  <connections/> </ui> 

Loader.gif introducir la descripción de la imagen aquí

Cambiar el connection string en tiempo de ejecucion

tengo una cadena una aplicacion hecha en vb.net, esta aplicación la corro en dos o tres redes diferentes, existe alguna manera de que se testee la conexion a una base de datos y si no responde utilice otra cadena?? si Conexion1 no anda utilizar Conexion2

utilizo entity Framework para conectarme a las bd.

mi idea es algo asi:

Saludos

Lambda y su corte de ejecución JAVA

Tengo una función lambda la cual me genera una excepción. Se ejecuta un proceso muy extenso y es propenso a fallos.

Básicamente se encarga de recorrer una serie de valores y realiza una funciones por cada una de ellas. Esas funciones lanzan una serie de excepciones. El tema es que imaginemos que tenemos 100 valores que recorrer. Si por un casual la vuelta 54 falla. La lamda entera corta su ejecución debido al throw de la excepción y el resto de valores los omite.

Como podría hacer que en caso de fallo no me fallara la lamba y se encargase de ir al siguiente.

un break o un return me valdría? un saludo

Alternar ejecución de dos funciones en el tiempo

Quiero alternar en el tiempo la ejecución de dos funciones de forma continua.

El siguiente diagrama de secuencia muestra una idea de lo que quiero llevar a cabo:

introducir la descripción de la imagen aquí

A fin de evitar una “chapuza” como puede ser un bucle while(True) utilizando time.sleep() mi primera aprximación en Python ha sido utilizar la opción threaring.Timer. A continuación muestro un código de ejemplo:

import threading   delayOff = 2 delayOn = 0.5 counter = 0  def tOn():          #Acciones en estado tOn           #.         #.         #.          global counter         counter+=1         print("Estoy en On - counter = " + str(counter))          #Timers         timer_on = threading.Timer(delayOn,tOff)          #Start the timers         timer_on.start()         def tOff():          #Acciones en estado tOff           #.         #.         #.          global counter         counter+=1         print("Estoy en Off - counter = " + str(counter))          #Timers         timer_off = threading.Timer(delayOff,tOn)         #Start the timers         timer_off.start()     #Iniciamos la serie llamando a tOn tOn()    

Que otras alternativas existen? Cuales son los pros y contras de esta solución?

Muchas gracias por la ayuda.

Valores variables en tiempo de ejecución

estoy haciendo un header que muestra un título dependiendo de la página donde te encuentres. El caso es que cuando en código se llama al encabezado, la variable aún no ha cogido el valor:

    //header title     $  subHeading = '--';     session_start();     if(isset($  _SESSION['login'])){         require_once('view/header.php'); /* Más comprobaciones */  $  subHeading = 'Orders'; 

En este caso el titulo muestra el valor al inicializar — en lugar de Orders… ¿Qué forma sería la correcta de abordar esto? (Espero haberme explicado bien)

Diferencia de salida en ejecución de comando Bash con terminal o con Python

Buenas noches comunidad.

Estoy ejecutando un comando Bash a traves de python con subprocess.popen y la salida que recibo es diferente a la que obtengo si lo ejecuto a través del terminal bash. Remito a continuación el código del script en python y las salidas que obtengo tanto en Bash como en python.

La verdad, me ha sorprendido bastante… ¿Quizá tenga que ver con el split que le realizo al comando? Según he visto, esa es la manera idónea de hacerlo, pero ni idea, soy nuevo en bash.

Código Python:

import subprocess  bashCommand = r"lspci | grep ' VGA ' | cut -d" " -f 1 | xargs -i lspci -v -s {}" process = subprocess.Popen(bashCommand.split(), stdout=subprocess.PIPE, shell=True) output, error = process.communicate() x = output.splitlines() 

Salida en la terminal de Linux:

01:00.0 VGA compatible controller: NVIDIA Corporation GT215 [GeForce GT 240] (rev a2) (prog-if 00 [VGA controller])     Subsystem: Gigabyte Technology Co., Ltd GT215 [GeForce GT 240]     Flags: bus master, fast devsel, latency 0, IRQ 27     Memory at f6000000 (32-bit, non-prefetchable) [size=16M]     Memory at e0000000 (64-bit, prefetchable) [size=256M]     Memory at f0000000 (64-bit, prefetchable) [size=32M]     I/O ports at e000 [size=128]     Expansion ROM at 000c0000 [disabled] [size=128K]     Capabilities: <access denied>     Kernel driver in use: nouveau     Kernel modules: nvidiafb, nouveau 

Imagen de salida de las variables en python: introducir la descripción de la imagen aquí

Como se puede apreciar, python me devuelve muchos mas valores, lo cual no está mal, pero no es precisamente lo que busco.

Un saludo, muchas gracias!! 😉