LitJson.dll下载地址

四、可变参数

定义函数时,有时候我们不确定调用的时候会传递多少个参数(不传参也可以)。此时,可用包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会显得非常方便。

工具

python-3.6.4-amd64.exe:

pywin32-222.win-amd64-py3.6.exe:

PyInstaller-3.3.1.tar:

密码:1znp

超复杂混合参数混用记:

从形参角度:

def foo(x,*args,a=4,**kwargs):  #使用默认参数时,注意默认参数的位置要在args之后kwargs之前
    print(x)
    print(a)
    print(args)
    print(kwargs)

foo(1,5,6,7,8,y=2,z=3)  #调用函数,不修改默认参数
1   #x的值
4   #a的值
(5, 6, 7, 8)   #*args的值
{'y': 2, 'z': 3}    ##kwargs的值

def foo(x,a=4,*args,**kwargs):  ##注意:当需要修改默认参数时,要调整默认参数的位置,要放在args之前即可,但不可放在开头。
    print(x)
    print(a)
    print(args)
    print(kwargs)

foo(1,9,5,6,7,8,y=2,z=3)    #调用函数,修改默认参数a为9
1   #x的值
9   #被修改后a的值
(5, 6, 7, 8)    #args的值
{'y': 2, 'z': 3}    #kwargs的值

从实参角度:

def foo(x,*args,a=4,**kwargs):  #使用默认参数时,注意默认参数的位置要在args之后kwargs之前
    print(x)
    print(a)
    print(args)
    print(kwargs)

foo(1,*(5,6,7,8),**{"y":2,"z":3})   #调用函数,不改默认参数
1   #x的值
4   #默认a的值
(5, 6, 7, 8)    #args的值
{'y': 2, 'z': 3}    #kwargs的值
-------------分割线----------------------

def foo(x,a=4,*args,**kwargs):  #注意:当需要修改默认参数时,要调整默认参数的位置,要放在args之前,但不可放在开头
    print(x)
    print(a)
    print(args)
    print(kwargs)

foo(1,9,10,*(5,6,7,8),**{"y":2,"z":3})  #调用函数,修改默认参数a为9
1   #x的值
9   #修改默认参数a后的值
(10, 5, 6, 7, 8)    #args的值
{'y': 2, 'z': 3}    #kwargs的值

 小结:

位置参数:

调用函数时所传参数的位置必须与定义函数时参数的位置相同

关键字参数:

使用关键字参数会指定参数值赋给哪个形参,调用时所传参数的位置可以任意

*位置参数:可接受任意数量的位置参数(元组);只能作为最后一个位置参数出现,其后参数均为关键字参数

**关键字参数:可接受任意数量的关键字参数(字典);只能作为最后一个参数出现

 

默认参数:默认参数的赋值只会在函数定义的时候绑定一次,默认值不会再被修改

  

本文主要记录为史振华在尝试转换PY文件为EXE文件过程中各种疑惑和最终解决方法,尝试了PYTHON
2.7/3.5/3.6及其相关依赖pywin32-222.win32/pywin32-222.win-amd64。非常感谢IT笔记若能更早看过此文很有帮助,网上有大量相关文章但与本人现实中相当的不同。系统环境:Win7
Enterprise SP1/ intel i5-4310M CPU /System type:64-bit OS。2018/2/13

如果大家看不懂,这里有一个视频讲的还是相当详细的

五、解包裹参数

*和**,也可以在函数调用的时候使用,称之为解包裹(unpacking)

原料

SHI.PY :功能为转换EXCEL文件名为AWL文件名内容未定。

import os;
print(“Hello, World澳门微尼斯人手机版,!”);
#file_path=os.getcwd();
sourcefile=input(“Drap *.xls to this window”);
file_name=sourcefile+’.awl’
content=’Hello\n,World\t’
print(content);
print(file_name);
if os.path.exists(file_name):
    os.remove(file_name);
F=open(file_name,’a+’);
F.write(content);
F.write(“:D”);
F.close();
input();

 1 using System.Collections;
 2 using System.Collections.Generic;
 3 using UnityEngine;
 4 using UnityEngine.Networking;
 5 using LitJson;
 6 using System.IO;
 7 using System.Net;
 8 
 9 
10 public class Connet : MonoBehaviour {
11 
12     //private ArrayList List = new ArrayList(5);
13     //private Rect rect = new Rect(10, 50, 150, 150);
14     //请求地址,写自己的请求地址就行
15     private string url = "http://xxxxxxxxx/ApiServlet?method=list";
16     //声明 JsonData     LitJson 提供的方法
17     JsonData itemdata;
18     //新建 List 存放数据
19     private List<Item> dataBase = new List<Item>();
20 
21     IEnumerator Start()
22     {
23         
24         WWW getData = new WWW(url);
25         yield return getData;
26         
27         if (getData.error != null)
28         {
29             Debug.Log(getData.error);
30         }
31         else
32         {
33             Debug.Log(getData.text);
34         }
35         //把请求到的数据转换成 JsonData array 类型,并存储到itemdata里
36         itemdata = JsonMapper.ToObject(getData.text);
37         //Debug.Log(itemdata);
38         //调用 ConstructItemDatabase() 函数
39         ConstructItemDatabase();
40         //测试数据
41         Debug.Log(dataBase[0].Name);
42     }
43     void ConstructItemDatabase()
44     {
45         //循环取数据
46         for (int i = 0; i < itemdata.Count; i++)
47         {
48             //把每个数据都添加到 dataBase 里  要和请求到的json数据对应
49             dataBase.Add(new Item((int)itemdata[i]["longId"], (int)itemdata[i]["intId"], itemdata[i]["item"].ToString()));
50         }
51     }
52 }
53 
54 //新建Item类
55 public class Item
56 {
57     //定义Item内的数据
58     //固定写法 XX{ get; set; }
59     public int ID { get; set; }
60     public int IntId { get; set; }
61     public string Name { get; set; }
62 
63     //接收上面的变量
64     public Item(int _longId, int _intId, string _name)
65     {
66         ID = _longId;
67         IntId = _intId;
68         Name = _name;
69     }
70 }

2、包裹关键字传递

def func(**kargs):
    ....

# func(a=1)
# func(a=1, b=2, c=3)

kargs是一个字典(dict),收集所有关键字参数

方法/步骤

运行python-3.6.4-amd64.exe,CPU是INTEL
i5看到AMD64多少有些别扭,能选都选上路径都不改完成安装。确定PATH:Computer-System
Properties-Advanced-Environment
Variables…
如:D:\users\f29691a\AppData\Local\Programs\Python\Python36。注意后续pywin32的版本需相同,PYTHON其他版本本身也能完成安装可最终安装PyInstaller或pywin32时报错无法顺利安装。

运行pywin32-222.win-amd64-py3.6.exe
安装中其会检测已安装的python版本,只有看到成功安装才有用。

解压PyInstaller-3.3.1.tar至D:根目录下,运行命令行CMD进入此目录,

//进入子目录 bootloader

cd bootloader

//build the bootloader 运行

python ./waf configure build install

//重新进入根目录

cd ..

//安装pyinstaller

python setup.py install

//from

#KEY#:安装中Reading
: Could not
find suitable distribution
forRequirement.parse(‘future’)可在浏览器中打开上述网站确定链接正常后CMD中再次python
setup.py install,亲测使用电信手机开热点给PC成功安装。

CMD至pyinstaller安装路径:pyinstaller –version命令

 D:\ PyInstaller-3.3.1>pyinstaller –version

3.3.1若不行会显示各种缺少文件和语法错误。

CMD至pyinstaller安装路径,尝试转化一个简单的*.PY成*.exe:

pyinstaller -F D:\PYTHON\SHI.py

生成的EXE文件会被归档到子文件夹dist中。

前一段时间一直纠结unity连接数据库请求数据,浪费了不少时间。后来改用http请求,顺利拿到数据,然后就着手于解析数据,就有了这篇文章

二、关键字参数

用于函数调用,通过“键-值”形式加以指定。可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求。

# 以下是用关键字参数正确调用函数的实例
# print_hello('tanggu', sex=1)
# print_hello(1, name='tanggu')
# print_hello(name='tanggu', sex=1)
# print_hello(sex=1, name='tanggu')

# 以下是错误的调用方式
# print_hello(name='tanggu', 1)
# print_hello(sex=1, 'tanggu')

通过上面的代码,我们可以发现:有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序的

发表评论

电子邮件地址不会被公开。 必填项已用*标注