本文目录一览:
- python 为什么装入库后调用时仍然显示没有这个库
- 在调用一些Python里的函数的时候 为什么有些函数需要实例化有些不需要?
- 为什么Python调用方法,有的前面加类名,有的不加?
- Python 使用类直接调用方法的时候 要忽略第一个参数吗?
- shell脚本里怎样在调用python时传参数
- java调用python时传递的参数问题?
python 为什么装入库后调用时仍然显示没有这个库
- 检查是否装入:
pip list
- 用
pip install --upgrade 包名
进行更新 - 确定安装到了正确的 Python 版本上
- 找到 Python 的路径后找到自己安装的库位置,复制路径,在你的程序前写入:
import sys
sys.path.append(路径)
- 我的路径是:
C:\Program Files\Python310\Lib\site-packages
在调用一些Python里的函数的时候 为什么有些函数需要实例化有些不需要?
如果一个方法是静态方法或类方法,那么可以直接调用;
如果一个方法不是静态的,那么它会需要 self
来访问实例中的某些属性,只能在实例上调用。
示例:
class MyUtil(object):
@staticmethod
def fn1():
return 'a'
def fn2(self):
return 'b'
对方法 fn1
,可以直接调用:
x = MyUtil.fn1()
但对于 fn2
,则只能实例化后调用:
util = MyUtil()
x = util.fn2()
当然,对于 fn1
,也可以在实例上调用:
util = MyUtil()
x = util.fn1()
为什么Python调用方法,有的前面加类名,有的不加?
答:Python 使用面向对象的方法进行编程时,确实有两种调用方法。
- 当被调用的方法是静态方法,那么这个时候无须实例化对象,直接按照
类名.函数名
格式即可,如math.sin()
,在该函数的底层实现当中,使用了@staticmethod
声明静态方法。当某个方法经常被使用时,把它声明成静态方法会方便一些; - 当被调用方法是非静态方法时,则必须先实例化一个对象,再进行方法调用。
例子
Python 使用类直接调用方法的时候 要忽略第一个参数吗?
一般情况下,第一个参数是 self
,调用时不需要传递。
使用装饰器 @staticmethod
修饰的方法,第一个参数不是 self
,因此调用时不能忽略第一个参数:
class MyTool(object):
def max_list_1(self, nums):
'''这个方法有两个参数,但调用时不需要传第一个参数'''
i_max = None
for i in range(len(nums)):
if i_max is None:
i_max = i
elif len(nums[i_max]) < len(nums[i]):
i_max = i
return i_max
@staticmethod
def max_list_2(nums):
'''这个方法只有一个参数'''
i_max = None
for i in range(len(nums)):
if i_max is None:
i_max = i
elif len(nums[i_max]) < len(nums[i]):
i_max = i
return i_max
data = [[1,2,3,4,5],
['a','b','c','d','e','r','t'],
[9999],]
tool = MyTool()
print(tool.max_list_1(data))
print(tool.max_list_2(data))
shell脚本里怎样在调用python时传参数
Python 可以利用 sys.argv
拿到命令行上的参数:
$ python test.py 1 2 3
test.py
:
import sys
print(sys.argv)
结果:
['test.py', '1', '2', '3']
所以在 build_using_xctool.sh
中可以这样调用 Python:
python /Users/gyd/Desktop/auto_send_email.py subject msg toaddrs fromaddr smtpaddr password
然后在 auto_send_email.py
中:
import sys
if __name__ == '__main__':
sendmail(*sys.argv[1:])
java调用python时传递的参数问题?
需要用到 jython.jar
Java 示例:
public static void main(String[] args) {
// 定义参数
String[] args2 = {"arg1","arg2"};
// 设置参数
PythonInterpreter.initialize(null, null, args2);
PythonInterpreter interpreter = new PythonInterpreter();
// 执行
interpreter.execfile("E:\\jython.py");
System.out.println("----------run over!----------");
}
Python 程序:
#!/bin/env python
import time
import sys
argCount = len(sys.argv)
print('before sleep')
time.sleep(5)
print('after sleep')
for str in sys.argv:
print(str)