Chinaunix首页 | 论坛 | 博客
  • 博客访问: 295201
  • 博文数量: 43
  • 博客积分: 1044
  • 博客等级: 准尉
  • 技术积分: 658
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-20 14:56
个人简介

人法地,地法天,天法道,道法自然。

文章分类

全部博文(43)

文章存档

2019年(1)

2013年(3)

2012年(15)

2011年(24)

分类: Python/Ruby

2011-05-17 10:08:30

在python中声明函数会使用def关键字,但是def是可执行代码。所以会有这样的现象
  1. #! /usr/bin/python
  2. import sys

  3. if __name__ == "__main__":
  4.     if len(sys.argv) > 1 :
  5.         def show(argv):
  6.             for i in range(len(argv)):
  7.                 print "argc = %d , args[%d] = %s" %(i,i,argv[i])

  8.             return 0
  9.     else :
  10.         def show(argv):
  11.             print argv

  12.             return 0

  13.     show(sys.argv)
程序执行到if的那个分支就定义那个分支中的show函数。
再看看C语言中类似的实现:
  1. #include <stdio.h>

  2. int main(int argc,char* args[])
  3. {
  4.     int (*show_p)(int argc,char* args[]) = NULL;

  5.     if(argc > 1){
  6.         int show(int argc,char* args[])
  7.         {
  8.             int i = 0;

  9.             printf("argc = %d \n", argc);
  10.             for(i = 0 ; i < argc ; i++){
  11.                 printf("argc = %d , args[%d] = %s \n",i,i,args[i]);
  12.             }

  13.             return 0;
  14.         }
  15.         show_p = show;
  16.     } else {
  17.         int show(int argc,char* args[])
  18.         {
  19.             printf("argc = 0 , args[0] = %s \n",args[0]);
  20.             return 0;
  21.         }
  22.         show_p = show;
  23.     }

  24.     show_p(argc,args);

  25.     return 0;
  26. }
C语言中使用函数指针也可以实现这种效果。

以上python版本为Python 2.7 (r27:82500, Sep 16 2010, 18:03:06)
GCC版本为gcc (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4)



阅读(1863) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~