1
multiple1902 2014-07-11 03:44:16 +08:00 1
你可以直接给出链接的: http://learnpythonthehardway.org/book/ex21.html
你的基本想法是对的,也就是「表达式可以用它的值去取代」,这和数学里的「表达式」的性质是一样的。具体到术语和描述,我个人觉得有点乱 —— 而这些其实是基本概念啊。比如「调用」(call)这个词特指的是运行一个函数 / 过程 / 方法,而不是用某个变量。你可以说调用 add 函数时,参数分别是 age 以及调用 subtract 函数得到的返回值。 大概明白你写 age + subtract 或者 height - multiply 的意思,但是不要这么写,因为 subtract 和 multiply 都不是变量或者值。即使是数学上,f(x) := x 的情况下,f(3) = 3 也不能简写成 f = 3。subtract(...) 的结果依赖于它的参数(这还是纯函数的情况,不是所有的函数的值都只依赖参数的),要写就写全。 |
2
O21 OP @multiple1902 你写的我大概看懂了。。第二段没太看懂 我数学不太好~~ 问下
print_one = multiply(weight,divide(iq,2)) print_two = subtract(height,print_one) print_three = add(age,print_two) 这样写算不算奇葩啊。。我新手不知道 怎么写才对。。 |
3
O21 OP 我刚自己折腾一个IP查询的。。 怎么都输出不出来=,=
我用的这个 源码 https://github.com/lxyu/17monip 然后我按照他的格式 >>> import IP >>> IP.find("www.baidu.com") '中国\t浙江\t杭州' 我写的 # -*- coding: utf-8 -* import IP ip_why = raw_input("请输入网址:\t") ip_s = IP.find("%r")%ip_why print "ip:%r"%ip_s 然后输出############################ Traceback (most recent call last): File "ip.py", line 5, in <module> ip_s = IP.find("%r")%ip_why TypeError: unsupported operand type(s) for %: 'NoneType' and 'str' |
4
O21 OP 解决了 用了 ip_s = IP.find("{}".format(ip_why))
用了format 格式化输出 就可以了 |
5
multiple1902 2014-07-11 04:29:21 +08:00 1
ip_s = IP.find(ip_why)
这个可以吗?我没看懂这里用格式化的意义。 这行 ip_s = IP.find("%r")%ip_why 直接的问题在于,%ip_why 应该放在小括号里面,也就是这样: ip_s = IP.find("%r" % ip_why) 但这样 ip_s 的头尾会有引号。如果用 %s 那 "%s" % ip_why 应该也就是 ip_why 的值。我不懂为什么会需要这些格式化的控制。 |
6
siteshen 2014-07-11 04:38:27 +08:00
@O21 你看看你的调用和示例的调用区别在哪里?
IP.find("www.baidu.com") 这里函数是IP.find,参数是"www.baidu.com"; ip_s = IP.find("%r") % ip_why 这语句大体相当于下面两条语句: ip_addr = IP.find("%r") # 函数是 IP.find,参数是"%r" ip_s = ip_addr % ip_why # % 有两种用途:1. 求模(a%b a, b均为数字);2. 格式化字符串(a%b, a为字符串, b为任意对象); 你可以分别执行这两步,看看是哪里出错了:你的期望结果和实际结果,再去想想结果为什么不一样。 |
7
O21 OP @multiple1902 你的可以。非常感谢 我感觉一下开窍了。。。 不过输出字符还是这样
:u'\u4e2d\u56fd\t\u6d59\u6c5f\t\u676d\u5dde' 我已经写了编码了啊 print ip_c.decode('utf-8') 肿么还是不行。。 |
8
O21 OP 我发现他这个模块本身就是这样。。。 乱码 我怎么能把他转换过来。
|
9
Sylv 2014-07-11 05:25:20 +08:00 via iPhone 1
@O21 输出的这个不是乱码,而是 unicode 汉字在 python 内部的存储格式,之所以会输出这个是因为你最后用 %r 对结果进行格式化了,相当于用 repr() 方法处理了输出结果转化为供解释器读取的形式,简单来说 repr() 输出的结果是给 python 看的,而 %s 才是将结果格式化为供人阅读的
|
10
ipconfiger 2014-07-11 10:31:10 +08:00
看着没有缩进的Python代码真是蛋紧啊
|
11
O21 OP @multiple1902 ip_s = IP.find("%r" % ip_why) 这样会返回一个空的值~~囧囧IP.find( ip_why)没问题
|
12
multiple1902 2014-07-11 11:59:37 +08:00
对啊不奇怪啊,我说了 "%r" % some_string 的结果左右会有引号,IP 相关的东西我没想出跟引号有什么联系。
对了,饭要一口一口地吃。 |