精华内容
下载资源
问答
  • (注:PC端无法看到大家的评论,需要关注微信公号后,从微信才可以看到),通过这个讨论话题,在评论中分享对自己帮助很大的Python技术书籍。 (Python开发者) 入门级 《》+ 入门级 + 微信49票 + 豆瓣评分 9.5 推荐...
  • 警告:此篇文章仅作为学习研究参考用途,请...是否有人故意放到小区里面让人无法获取呢?  带着这些问题,我开始了研究如何获取这些数据。 免责声明:本站所有文章和图片均来自用户分享和网络收集,文章和图片版
  • 创作不易,感谢大家的打赏支持,这些钱基本不会用于购买咖啡,而是通过腾讯公益、美团公益、水滴筹等平台捐赠给需要帮助的(点击了解捐赠情况)。需要加入QQ交流群的可以扫描下面的二维码,交流群会为大家提供学习...
  • 该项目强调安全性,同时向其他用户发送他们希望其他人看到的私人消息。 随时检查回购。 谢谢! 如何运行: 只需将存储库克隆到本地计算机,并确保已安装python。 安装完这些文件后,您可以导航到包含该文件的...
  • 最近才开始学习Python知道如何下手,最近老板下达任务说要Python中如果别人调用你的的函数功能,但是还看到源代码,问了好多同学都说知道。 上网搜了搜也没有具体的答案,好多版本的都没有说清楚。 我把...

    Day1---python协同开发项目时,如何使得让别人调用你的模块,并且看不到你的源代码。

    最近才开始学习Python,不知道如何下手,最近老板下达任务说要Python中如果别人调用你的的函数功能,但是还不能看到源代码,问了好多同学都说不知道。

    上网搜了搜也没有具体的答案,好多版本的都没有说清楚。

    我把我遇到的问题写下来,希望能够帮到有和我遇到一样问题和困难的人。

    首先,这个问题其实是,让我们先把Python源码编译成别的文件,先编译成.c文件,然后在把.c文件编译成pyd文件。在这里说一下,在Linux系统中最终是编译成.so文件,也就是在Windows系统中的pyd文件,这两种文件是看不到源码的,而且还可以被调用。

    具体方法如下:

    Python版本是3.7.7的(我是直接安装的anaconda4.8.3,直接自己带的Python版本),安装的visual studio 2019(这里一定要安装这个,如果是Python2.7可以直接下载MinGW配置一下就行,但是Python3x的话,目前我找到的方法是安装vs2019,如果有别的方法可以随时交流,安装的时候选择Python模块就行)

    如下图所示:

    例如需要转换的文件是test.py文件,在其相同目录下,新建setup.py文件,最后用命令行进入到相应目录,执行以下命令python setup.py build_ext --inplace(--inplace 代表是在当前目录下生成pyd文件)

    生成pyd文件之后,放到相应的项目中就可以在python中import了

    如果是在命令行中可以调用,把pyd文件放到python对应的site-packages里面就可以了。

    如果是刚执行完命令,在这里直接import的时候,是不需要放到site-packages里面的,再次打开需要调用的时候则需要。

    setup.py文件里面的内容是:

    import distutils.core
    from Cython.Build import cythonize
    from Cython.Distutils import build_ext
    
    a = cythonize("test.py")[0]  #需要编译的.py文件
    distutils.core.setup(
        name = 'te',      #包的名字
        version = "1.0",
        ext_modules=[a],
        author = "zyc",
        )
    

     

    展开全文
  • Python进阶(二十四)-Python中函数的参数定义和可变参数  刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个和*让人有点费解。其实只要把函数参数定义搞清楚了,...

    刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个*和**让人有点费解。其实只要把函数参数定义搞清楚了,就不难理解了。

    先说说函数定义,我们都知道,下面的代码定义了一个函数funcA

    def funcA():
      pass
    

    显然,函数funcA没有参数。下面这个函数funcB就有两个参数了,

    def funcB(a, b):
      print a
      print b
    

    调用的时候,我们需要使用函数名,加上圆括号扩起来的参数列表,比如 funcB(100, 99),执行结果是:
    100
    99

    很明显,参数的顺序和个数要和函数定义中一致,如果执行funcB(100),Python会报错的:

    TypeError: funcB() takes exactly 2 arguments (1 given)
    

    我们可以在函数定义中使用参数默认值,比如

    def funcC(a, b=0):
      print a
      print b
    

    在函数funcC的定义中,参数b有默认值,是一个可选参数,如果我们调用funcC(100),b会自动赋值为0。

    OK,目前为止,我们要定义一个函数的时候,必须要预先定义这个函数需要多少个参数(或者说可以接受多少个参数)。一般情况下这是没问题的,但是也有在定义函数的时候,不能知道参数个数的情况(想一想C语言里的printf函数),在Python里,带*的参数就是用来接受可变数量参数的。看一个例子

    def funcD(a, b, *c):
      print a
      print b
      print "length of c is: %d " % len(c)
      print c
    

    调用funcD(1, 2, 3, 4, 5, 6)结果是
    1
    2
    length of c is: 4
    (3, 4, 5, 6)

    我们看到,前面两个参数被a、b接受了,剩下的4个参数,全部被c接受了,c在这里是一个tuple。我们在调用funcD的时候,至少要传递2个参数,2个以上的参数,都放到c里了,如果只有两个参数,那么c就是一个empty tuple。

    好了,一颗星我们弄清楚了,下面轮到两颗星。

    上面的例子里,调用函数的时候,传递的参数都是根据位置来跟函数定义里的参数表匹配的,比如funcB(100, 99)和funcB(99, 100)的执行结果是不一样的。在Python里,还支持一种用关键字参数(keyword argument)调用函数的办法,也就是在调用函数的时候,明确指定参数值赋值给哪个形参。比如还是上面的funcB(a, b),我们通过这两种方式调用

    funcB(a=100, b=99)
    

    funcB(b=99, a=100)
    

    结果跟funcB(100, 99)都是一样的,因为我们在使用关键字参数调用的时候,指定了把100赋值给a,99赋值给b。也就是说,关键字参数可以让我们在调用函数的时候打乱参数传递的顺序!

    另外,在函数调用中,可以混合使用基于位置匹配的参数和关键字参数,前题是先给出固定位置的参数,比如
    def funcE(a, b, c):
    print a
    print b
    print c
    调用funcE(100, 99, 98)和调用funcE(100, c=98, b=99)的结果是一样的。好了,经过以上铺垫,两颗星总算可以出场了:如果一个函数定义中的最后一个形参有 ** (双星号)前缀,所有正常形参之外的其他的关键字参数都将被放置在一个字典中传递给函数,比如:

    def funcF(a, **b):
      print a
      for x in b:
        print x + ": " + str(b[x])
    

    调用funcF(100, c=‘你好’, b=200),执行结果
    100
    c: 你好
    b: 200
    大家可以看到,b是一个dict对象实例,它接受了关键字参数b和c。

    展开全文
  • 大家都知道python是脚本语言,源码可以直接执行,有时需要提高执行效率或者保密(因为有时候使用人看到源码文件),那就涉及到python编译了,那么该如何做呢? 有两种方法可以做到。 1、一种是直接使用命令...

    大家都知道python是脚本语言,源码可以直接执行,有时需要提高执行效率或者保密(因为有时候不想让使用人看到源码文件),那就涉及到python编译了,那么该如何做呢? 有两种方法可以做到。 1、一种是直接使用命令编译成pyc或者pyo文件。 新建test.py文件,代码如下:

    #!/usr/bin/python
    print "hello world!"

    编译成pyc文件使用命令:

    python -m py_compile test.py

    -m py_compile是加载py_compile编译模块的意思,可以看到当前目录下生成了test.pyc文件 编译成pyo文件使用命令:

    python -O -m py_compile test.py

    可以看到当前目录下生成了test.pyo文件。 这时使用vim打开文件时可以看到里面是乱码,可以达到部分源码隐藏的目的,说是“部分”是因为仍然可以看到部分源码,使用反编译软件也可以看到源码。但总可以吓唬一下小白了。 2、另一种是使用pyinstaller工具编译成可执行程序 使用pip install pyinstaller命令安装pyinstaller工具。此工具可以把python文件打包成二进制的包。 方法:

    pyinstaller -F test.py

    -F命令是为了打成一个包,把一些库文件也放到一起。不用的话可执行文件和库文件分开,不利于使用。 可以看到当前目录下生成了distbuild两个文件夹。dist下有test二进制文件。此方法可以达到完全加密的目的。 总结:第一种方法比较简单易用,但是只能部分加密。第二种方法安全可靠,完全加密。但是两种方法都存在一个问题,就是兼容性太差,使用python2.6编译的程序放到2.7版本上就不能执行了。可执行文件也是这样,在iSoft Server 4.0上编译的可执行文件到iSoft Server 3.2上也不能执行了。所以打算在不同平台使用的python脚本这种方法不太好用,python兼容性差是个通病,还是c/c++好呀。 我最近就是打算加密一个python文件,最后因为兼容性的问题只好作罢了。不知道大家有没有更好的方法呢?要求加密python源码,而且保证可以正常执行。  

    转载于:https://www.cnblogs.com/aijingyi/p/6795685.html

    展开全文
  • python函数定义

    2015-07-12 18:46:00
    刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个*和**让人有点费解。其实只要把函数参数定义搞清楚了,就难理解了。 先说说函数定义,我们都知道,下面的代码...

    刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个*和**让人有点费解。其实只要把函数参数定义搞清楚了,就不难理解了。

    先说说函数定义,我们都知道,下面的代码定义了一个函数funcA

    def funcA():
      pass
        
    显然,函数funcA没有参数(同时啥也不干:D)。

    下面这个函数funcB就有两个参数了,
    def funcB(a, b):
      print a
      print b
    调用的时候,我们需要使用函数名,加上圆括号扩起来的参数列表,比如 funcB(100, 99),执行结果是:
    100
    99
    很明显,参数的顺序和个数要和函数定义中一致,如果执行funcB(100),Python会报错的:
    TypeError: funcB() takes exactly 2 arguments (1 given)

    我们可以在函数定义中使用参数默认值,比如
    def funcC(a, b=0):
      print a
      print b
    在函数funcC的定义中,参数b有默认值,是一个可选参数,如果我们调用funcC(100),b会自动赋值为0。

    OK,目前为止,我们要定义一个函数的时候,必须要预先定义这个函数需要多少个参数(或者说可以接受多少个参数)。一般情况下这是没问题的,但是也有在定义函数的时候,不能知道参数个数的情况(想一想C语言里的printf函数),在Python里,带*的参数就是用来接受可变数量参数的。看一个例子
    def funcD(a, b, *c):
      print a
      print b
      print "length of c is: %d " % len(c)
      print c
    调用funcD(1, 2, 3, 4, 5, 6)结果是
    1
    2
    length of c is: 4
    (3, 4, 5, 6)
    我们看到,前面两个参数被a、b接受了,剩下的4个参数,全部被c接受了,c在这里是一个tuple。我们在调用funcD的时候,至少要传递2个参数,2个以上的参数,都放到c里了,如果只有两个参数,那么c就是一个empty tuple。

    好了,一颗星我们弄清楚了,下面轮到两颗星。

    上面的例子里,调用函数的时候,传递的参数都是根据位置来跟函数定义里的参数表匹配的,比如funcB(100, 99)和funcB(99, 100)的执行结果是不一样的。在Python里,还支持一种用关键字参数(keyword argument)调用函数的办法,也就是在调用函数的时候,明确指定参数值付给那个形参。比如还是上面的funcB(a, b),我们通过这两种方式调用
    funcB(a=100, b=99)

    funcB(b=99, a=100)
    结果跟funcB(100, 99)都是一样的,因为我们在使用关键字参数调用的时候,指定了把100赋值给a,99赋值给b。也就是说,关键字参数可以让我们在调用函数的时候打乱参数传递的顺序!

    另外,在函数调用中,可以混合使用基于位置匹配的参数和关键字参数,前题是先给出固定位置的参数,比如
    def funcE(a, b, c):
      print a
      print b
      print c
    调用funcE(100, 99, 98)和调用funcE(100, c=98, b=99)的结果是一样的。

    好了,经过以上铺垫,两颗星总算可以出场了:
    如果一个函数定义中的最后一个形参有 ** (双星号)前缀,所有正常形参之外的其他的关键字参数都将被放置在一个字典中传递给函数,比如:
    def funcF(a, **b):
      print a
      for x in b:
        print x + ": " + str(b[x])
    调用funcF(100, c='你好', b=200),执行结果
    100
    c: 你好
    b: 200

    或者

    b={'c':'你好','b':200}

    调用funcF(100,**b)

    转载自:http://www.cnblogs.com/tqsummer/archive/2011/01/25/1944416.html

    转载于:https://www.cnblogs.com/chaofn/p/4641321.html

    展开全文
  • 刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个*和**让人有点费解。其实只要把函数参数定义搞清楚了,就难理解了。 先说说函数定义,我们都知道,下面的...
  • 三次元人类屏蔽器是Librian幼女娱乐中心的最新发明,可以你在网上冲浪的时候免受不良信息的毒害! 效果 哇,水群画面清爽多了! 总之只要在你的电脑上开启屏蔽器,之后你选中的任何窗口,只要出现的头,就会被莉...
  • 这里要先说明下,因为经常有很多问 openatx/uiautomator2 并支持iOS测试,需要iOS自动化测试,可以转到这个库 openatx/facebook-wda。 PS: 这个库 https://github.com/NeteaseGame/ATX 目前已经维护了,请...
  • 刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args,**kwargs)这样的函数定义,这个*和**让人有点费解。其实只要把函数参数定义搞清楚了,就难理解了。 先说说函数定义,我们都知道,下面的...
  • python可变参数

    2014-07-27 15:25:31
    刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个*和**让人有点费解。其实只要把函数参数定义搞清楚了,就难理解了。 先说说函数定义,我们都知道,下面的代码...
  • 刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个*和**让人有点费解。其实只要把函数参数定义搞清楚了,就难理解了。 先说说函数定义,我们都知道,下面的...
  • 笔记6:python参数

    2016-05-28 10:43:28
    刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个*和**让人有点费解。其实只要把函数参数定义搞清楚了,就难理解了。 先说说函数定义,我们都知道,下面的...
  • 刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个*和**让人有点费解。其实只要把函数参数定义搞清楚了,就难理解了。 先说说函数定义,我们都知道,下面的代码...
  • python的可变参数

    2014-03-14 20:36:29
    刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个*和**让人有点费解。其实只要把函数参数定义搞清楚了,就难理解了。 先说说函数定义,我们都知道,下面的...
  • 屏幕截图 什么是魔术磁铁? Magic Magnet是一款类似于爬虫的应用程序,可您轻松地在许多地方搜索磁体链接。... Python快(而且我们绝对需要爬虫的速度),能为移动编译(我知道Kivy和BeeWare是可选项,但我
  • Python函数的可变参数

    2015-03-10 09:37:33
    刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个*和**让人有点费解。其实只要把函数参数定义搞清楚了,就难理解了。 先说说函数定义,我们都知道,下面的...
  • 好嘞,可以show出你的改进、优化、补充代码更多小伙伴看到!例如下面这样: 提交案例 作者介绍 小傅哥,一线互联网 java 工程师、架构师,开发过交易&营销、写过运营&活动、设计过中间件也...
  • 刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个*和**让人有点费解。其实只要把函数参数定义搞清楚了,就难理解了。 先说说函数定义,我们都知道,下面的代码...
  • 本代码使用简单的封装方法,并做了比较走心的注释,希望能给初学Python的小伙伴提供一些灵感,也能有实际需求的可以快速修改、使用。 源码地址:https://github.com/yc2code/WechatInvoiceParser P.S. 工具基于...
  • 刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个*和**让人有点费解。其实只要把函数参数定义搞清楚了,就难理解了。 先说说函数定义,我们都知道,下面的代码...
  • 刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个*和**让人有点费解。其实只要把函数参数定义搞清楚了,就难理解了。*args代表args是一个元组,**kwargs代表了...
  • Galvanize 数据科学入门 ... 您绝需要成为所有这些方面的专家,但我们已经确定这些主题是我们所看到的帮助学生取得成功的主题。 因此,任何希望申请我们的计划的都可以通过完成这些资源为面试/申请过程做准
  • 刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个*和**让人有点费解。其实只要把函数参数定义搞清楚了,就难理解了。先说说函数定义,我们都知道,下面的代码...

空空如也

空空如也

1 2 3 4 5
收藏数 91
精华内容 36
关键字:

python不让人看到源码

python 订阅