python环境,例子

安装

1 linux

点https://www.python.org/downloads/source/,点XZ compressed source tarball,解压
执行 ./configure 脚本
make

make install

python安装

https://www.python.org/download/releases/2.7.5/

./configure && make  && make install

如何升级到2.7.5

下载Python-2.7安装包:
wget http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tgz
解压缩安装包
tar -zxvf Python-2.7.5.tgz
进入解压缩后的文件夹
cd Python-2.7.3
在编译前先在/usr/local建一个文件夹python27(作为Python的安装路径,以免覆盖老的版本)
mkdir /usr/local/python27
在解压缩后的目录下编译安装
./configure --prefix=/usr/local/python27
make
make install
此时没有覆盖老版本,再将原来/usr/bin/python链接改为别的名字  
mv /usr/bin/python /usr/bin/python2.6
再建立新版本python的链接  
ln -s /usr/local/python27/bin/python2.7  /usr/bin/python
查看最新python版本
python --version

2 windows

点https://www.python.org/downloads/windows/,点Windows x86-64 executable installer,安装即可。

if __name__ == '__main__':
1:__name__是一个变量。前后加了爽下划线是因为是因为这是系统定义的名字。普通变量不要使用此方式命名变量。
2:Python有很多模块,而这些模块是可以独立运行的!这点不像C++和C的头文件。
3:import的时候是要执行所import的模块的。
4:__name__就是标识模块的名字的一个系统变量。这里分两种情况:假如当前模块是主模块(也就是调用其他模块的模块),那么此模块名字就是__main__,通过if判断这样就可以执行“__mian__:”后面的主函数内容;假如此模块是被import的,则此模块名字为文件

名字(不加后面的.py),通过if判断这样就会跳过“__mian__:”后面的内容。
通过上面方式,python就可以分清楚哪些是主函数,进入主函数执行;并且可以调用其他模块的各个函数等等。


urllib urllib2


Python的urllib和urllib2模块都做与请求URL相关的操作。
它们最显著的差异为:
urllib2可以接受一个Request对象,并以此可以来设置一个URL的headers,但是urllib只接收一个URL。
urllib模块可以提供进行urlencode的方法,该方法用于GET查询字符串的生成,urllib2的不具有这样的功能.
python 2.7.x提供了urllib与urllib2,鉴于上述异同两个库通常搭配使用。

urllib模块提供的上层接口,使我们可以像读取本地文件一样读取www和ftp上的数据。


POST方式:

import urllib
import urllib2

values = {"username":"1016903103@qq.com","password":"XXXX"}
data = urllib.urlencode(values)
url = "https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn"
request = urllib2.Request(url,data)
response = urllib2.urlopen(request)
print response.read()

GET方式:

import urllib
import urllib2

values={}
values['username'] = "1016903103@qq.com"
values['password']="XXXX"
data = urllib.urlencode(values)
url = "http://passport.csdn.net/account/login"
geturl = url + "?"+data
request = urllib2.Request(geturl)
response = urllib2.urlopen(request)
print response.read()

注:
urlopen(url, data, timeout)
第一个参数url即为URL,第二个参数data是访问URL时要传送的数据,第三个timeout是设置超时时间。
第二三个参数是可以不传送的,data默认为空None,timeout默认为 socket._GLOBAL_DEFAULT_TIMEOUT
第一个参数URL是必须要传送的,在这个例子里面我们传送了百度的URL,执行urlopen方法之后,返回一个response对象,返回信息便保存在这里面。

urllib.quote(url)和urllib.quote_plus(url)
将url数据获取之后,并将其编码,从而适用与URL字符串中,使其能被打印和被web服务器接受。
>>> urllib.quote('http://www.baidu.com')
'http%3A//www.baidu.com'
>>> urllib.quote_plus('http://www.baidu.com')
'http%3A%2F%2Fwww.baidu.com'

urllib.urlencode(query)
将URL中的键值对以连接符&划分
>> params=urllib.urlencode({'spam':1,'eggs':2,'bacon':0})
>>> params
'eggs=2&bacon=0&spam=1'
>>> f=urllib.urlopen("http://python.org/query?%s",params)
>>> print f.read(


函数例子

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 定义函数
def printme( str ):
 #  "打印任何传入的字符串"
   print str;
   return;
 
# 调用函数
printme("我要调用用户自定义函数!");
printme("再次调用同一函数");

#!/usr/bin/python
# -*- coding: UTF-8 -*-

c调用python的例子

python代码:
#test function  
def add(a,b):  
    print "in python function add"  
    print "a = " + str(a)  
    print "b = " + str(b)  
    print "ret = " + str(a+b)  
    return  
 
def foo(a):  
 
    print "in python function foo"  
    print "a = " + str(a)  
    print "ret = " + str(a * a)  
    return   
 
class guestlist:  
    def __init__(self):  
        print "aaaa"  
    def p():  
      print "bbbbb"  
    def __getitem__(self, id):  
      return "ccccc"  
def update():  
    guest = guestlist()  
    print guest['aa']  
 
#update()


C代码:
/**g++ -o callpy callpy.cpp -I/usr/include/python2.6 -L/usr/lib64/python2.6/config -lpython2.6**/  
#include <Python.h>  
int main(int argc, char** argv)  
{  
    // 初始化Python  
    //在使用Python系统前,必须使用Py_Initialize对其  
    //进行初始化。它会载入Python的内建模块并添加系统路  
    //径到模块搜索路径中。这个函数没有返回值,检查系统  
    //是否初始化成功需要使用Py_IsInitialized。  
    Py_Initialize();  
 
    // 检查初始化是否成功  
    if ( !Py_IsInitialized() ) {  
        return -1;  
    }  
    // 添加当前路径  
    //把输入的字符串作为Python代码直接运行,返回0  
    //表示成功,-1表示有错。大多时候错误都是因为字符串  
    //中有语法错误。  
    PyRun_SimpleString("import sys");  
    PyRun_SimpleString("print '---import sys---'");   
    PyRun_SimpleString("sys.path.append('./')");  
    PyObject *pName,*pModule,*pDict,*pFunc,*pArgs;  
 
    // 载入名为pytest的脚本  
    pName = PyString_FromString("pytest");  
    pModule = PyImport_Import(pName);  
    if ( !pModule ) {  
        printf("can't find pytest.py");  
        getchar();  
        return -1;  
    }  
    pDict = PyModule_GetDict(pModule);  
    if ( !pDict ) {  
        return -1;  
    }  
 
    // 找出函数名为add的函数  
    printf("----------------------\n");  
    pFunc = PyDict_GetItemString(pDict, "add");  
    if ( !pFunc || !PyCallable_Check(pFunc) ) {  
        printf("can't find function [add]");  
        getchar();  
        return -1;  
     }  
 
    // 参数进栈  
    *pArgs;  
    pArgs = PyTuple_New(2);  
 
    //  PyObject* Py_BuildValue(char *format, ...)  
    //  把C++的变量转换成一个Python对象。当需要从  
    //  C++传递变量到Python时,就会使用这个函数。此函数  
    //  有点类似C的printf,但格式不同。常用的格式有  
    //  s 表示字符串,  
    //  i 表示整型变量,  
    //  f 表示浮点数,  
    //  O 表示一个Python对象。  
 
    PyTuple_SetItem(pArgs, 0, Py_BuildValue("l",3));  
    PyTuple_SetItem(pArgs, 1, Py_BuildValue("l",4));  
 
    // 调用Python函数  
    PyObject_CallObject(pFunc, pArgs);  
 
    //下面这段是查找函数foo 并执行foo  
    printf("----------------------\n");  
    pFunc = PyDict_GetItemString(pDict, "foo");  
    if ( !pFunc || !PyCallable_Check(pFunc) ) {  
        printf("can't find function [foo]");  
        getchar();  
        return -1;  
     }  
 
    pArgs = PyTuple_New(1);  
    PyTuple_SetItem(pArgs, 0, Py_BuildValue("l",2));   
 
    PyObject_CallObject(pFunc, pArgs);  
       
    printf("----------------------\n");  
    pFunc = PyDict_GetItemString(pDict, "update");  
    if ( !pFunc || !PyCallable_Check(pFunc) ) {  
        printf("can't find function [update]");  
        getchar();  
        return -1;  
     }  
    pArgs = PyTuple_New(0);  
    PyTuple_SetItem(pArgs, 0, Py_BuildValue(""));  
    PyObject_CallObject(pFunc, pArgs);       
 
    Py_DECREF(pName);  
    Py_DECREF(pArgs);  
    Py_DECREF(pModule);  
 
    // 关闭Python  
    Py_Finalize();  
    return 0;  
}


问题:
1 error LNK2001: 无法解析的外部符号 __imp_PyString_FromString
这是由于VS跟python的位不一样导致,都用32,或64。
2 extmodule.obj : error LNK2019: unresolved external symbol __imp___Py_Dealloc referenced in function _PySwigObject_format
这主要是因为 Py_DEBUG/Py_TRACE_REFS 引起, 修改 Python\include 下的 pyconfig.h, object.h 两个文件就行了。
1. 修改 pyconfig.h
修改
#ifdef _DEBUG
# define Py_DEBUG
#endif

#ifdef _DEBUG
//# define Py_DEBUG
#endif

修改
# ifdef _DEBUG
# pragma comment(lib,"python24_d.lib")
# else
# pragma comment(lib,"python24.lib")
# endif

# ifdef _DEBUG
# pragma comment(lib,"python24.lib")
# else
# pragma comment(lib,"python24.lib")
# endif

2. object.h
修改
#if defined(Py_DEBUG) && !defined(Py_TRACE_REFS)
#define Py_TRACE_REFS
#endif

#if defined(Py_DEBUG) && !defined(Py_TRACE_REFS)
// #define Py_TRACE_REFS
#endif
 

socket库

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:server.py

import socket               # 导入 socket 模块

s = socket.socket()         # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 12345                # 设置端口
s.bind((host, port))        # 绑定端口
s.listen(5)                 # 等待客户端连接
while True:
    c, addr = s.accept()     # 建立客户端连接。
    print '连接地址:', addr
    c.send('欢迎访问菜鸟教程!')
    c.close()                # 关闭连接


#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:client.py

import socket               # 导入 socket 模块

s = socket.socket()         # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 12345                # 设置端口好

s.connect((host, port))
print s.recv(1024)
s.close() 

system库

os.system(cmd):
该方法在调用完shell脚本后,返回一个16位的二进制数,低位为杀死所调用脚本的信号号码,高位为脚本的退出状态码,即脚本中“exit 1”的代码执行后,os.system函

数返回值的高位数则是1,如果低位数是0的情况下,则函数的返回值是0×100,换算为10进制得到256。
如果我们需要获得os.system的正确返回值,那使用位移运算可以还原返回值:
1. >>>  n = os.system(test.sh)
2. >>> n >> 8
3. >>> 3


问题:

SyntaxError: Missing parentheses in call to 'print'

原因:Mac安装俩个Python版本,2和3,python2系列可以支持 print “xxxx” ,python系列需要使用print("xxx")


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的Python云计算例子,使用了AWS的Lambda服务和S3存储服务: 1. 首先,确保您已经安装了AWS CLI并配置了正确的凭证信息。 2. 创建一个名为`lambda_function.py`的Python文件,并编写以下代码: ```python import json def lambda_handler(event, context): # 从事件中获取传入参数 operand1 = int(event['operand1']) operand2 = int(event['operand2']) operator = event['operator'] result = None # 执行相应的计算操作 if operator == '+': result = operand1 + operand2 elif operator == '-': result = operand1 - operand2 elif operator == '*': result = operand1 * operand2 elif operator == '/': result = operand1 / operand2 # 返回计算结果 return { 'statusCode': 200, 'body': json.dumps({ 'result': result }) } ``` 3. 在命令行中执行以下命令,将代码打包成zip文件: ``` zip lambda_function.zip lambda_function.py ``` 4. 创建一个S3存储桶,并将打包好的`lambda_function.zip`上传到存储桶中。 5. 在命令行中执行以下命令,创建一个Lambda函数: ``` aws lambda create-function --function-name myCalculator --runtime python3.8 --role your_lambda_role --handler lambda_function.lambda_handler --code S3Bucket=your_s3_bucket,S3Key=lambda_function.zip ``` 确保将`your_lambda_role`替换为您的Lambda函数所需的角色,并将`your_s3_bucket`替换为您创建的S3存储桶名称。 6. 使用AWS Lambda的API网关或其他方式,将外部请求转发到该Lambda函数。 通过以上步骤,您可以创建一个简单的Python云计算功能。当接收到包含操作数和运算符的请求时,Lambda函数将执行相应的计算操作,并返回结果。您可以根据自己的需求进行扩展和定制化。请确保根据您的具体环境和需求进行适当的配置和安全措施。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值