会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 133818个问题

提问:

老师,这里闭包的调用绕来绕去的,我的确看了几遍视频都不是很明白。想问一下几个问题:

1) 程序执行是从哪里开始的?

是从 func1 = funcOut(func1) 和 func2 = funcOut(func2)  还是从 func1()和func2()开始的?看下面有些人的提问是说从func1()和 func2()开始的,不太明白为什么要跳过前面的  func1 = funcOut(func1) 和 func2 = funcOut(func2)


2) func1 = funcOut(func1) , 把funcOut(func1) 赋值给func1, 因为funcOut(func1)的结果是return funcIn, 所有是相当于是 func1 = funcIn ?


3) return funcIn 返回的是一个内部函数名,返回的是funcIn函数执行的结果?

"""
装饰器 Decorator
"""
import time
def writeLogs(func):
    try:
        file = open('log.txt', 'a', encoding="utf-8")
        file.write(func.__name__)
        file.write('\t')
        file.write(time.asctime())
        file.write('\n')
    except Exception as e:
        print(e)
    finally:
        file.close()

# 使用闭包,在不修改源代码的情况下,添加日志功能
def funcOut(func):
    def funcIn():
        # 添加新的功能
        writeLogs(func)    # 新增功能,日志
        func()   # 执行原来的功能
    return funcIn

def func1():
    print("我是功能1")
def func2():
    print("我是功能2")


# 闭包的调用
func1 = funcOut(func1)   # 这里是把func1当做实参传到funcOut(func)函数中,func = func1
func2 = funcOut(func2)   # 这里是把func2当做实参传到funcOut(func)函数中,func = func2

func1()
func2()

image.png

Python 全系列/第四阶段:函数式编程和核心特性/生成器和装饰器 30181楼
JAVA 全系列/第四阶段:数据库与AI协同技术实战/Oracle 数据库的使用 30182楼
JAVA 全系列/第一阶段:AI驱动的JAVA编程/数组和数据存储 30183楼
Python 全系列/第七阶段:网页编程基础/jquery 30190楼

<?php
  $username=$_POST['myName'];
  $password=$_POST['myPassword'];
  $success=array('msg'=>'ok');
  $con=mysqli_connect('localhost','root','','beixidb');
  if($con){
     mysqli_query($con,'set names utf8');
     mysqli_query($con,'set character_set_client utf8');
     mysqli_query($con,'set character_set_results utf8');
     $sql="select * from userinfo where 1";
     $result=$con->query($sql);
     //解析查询的结果
     if($result->num_rows>0){
      $info=[];
      for($i=0;$row=$result->fetch_assoc();$i++){
           $info[$i]=$row;
           }
           $success['infoCode']=$info;
           //得到解析数组后判断用户发来的数据是否存在数据库中
           $flag=0;//只要执行break就变为1否则一直为0
           for($j=0;$j<count($info);$j++){
              //判断是否与当前用户名相同
              if($info[$j]['username']==$username){
                 //如果相同继续判断是否是当前条目的密码
                 if($info[$j]['password']==$password){
                    $success['infoCode']=0;
                    $flag=1;
                    break;
                 }
              }
           }
           if($flag=0){
              $success['infoCode']=1;
           }
           $success['infoCode']=$info;
     }else{
      $success['infoCode']=1;
     }
  }else{
      $success['infoCode']=2;//0代表登陆成功1代表登录失败2代表数据库连接失败
  }

  //返回给前端
  echo json_encode($success);
?>

老师我这段代码点击登陆后告诉我数据库连接失败,可是我真的找不到哪里错了。。

WEB前端全系列/第五阶段:前后端交互/PHP、数据库编程与设计 30194楼
Python 全系列/第二阶段:Python 深入与提高/GUI编程(隐藏) 30195楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637