Python入门(四)
python3 官方中文文档
https://docs.python.org/zh-cn/3/
python3 模块使用手册
https://docs.python.org/zh-cn/3/library/index.html
python3 编程常见手册
https://docs.python.org/zh-cn/3/faq/programming.html#what-is-the-difference-between-arguments-and-parameters
定义函数(外网加载有点慢)
http://www.pythontutor.com/visualize.html#mode=edit
In [1]: name = " '-d-centos-root'"
In [2]: name.split("─")
Out[2]: [" '-d-centos-root'"]
In [3]: name.split("-")
Out[3]: [" '", 'd', 'centos', "root'"]
In [4]: name.split("-",2)
Out[4]: [" '", 'd', "centos-root'"]
#!/usr/bin/bash
show(){
echo $1
}
show $1
[root@localhost tmp]# sh t.sh world
world
[root@localhost tmp]# sh t.sh worlddd
worlddd
[root@localhost tmp]# sh t.sh worlddddddd
worlddddddd
参数 有参函数
In [2]: def foo(x,z,d=10,y=10):
...: print("x",x)
...: print("z",z)
...: print("d",d)
...: print("y",y)
...:
In [3]: foo(1,2,3,4,)
x 1
z 2
d 3
y 4
In [4]: foo(1,2,3,y=4) #关键字参数)
x 1
z 2
d 3
y 4
In [5]: foo(d=1,z=2,x=3,y=4) #关键字参数)
x 3
z 2
d 1
y 4
形参和实参之间有什么区别?
形参 是指出现在函数定义中的名称,而 实参 则是在调用函数时实际传入的值。
形参定义了一个函数能接受何种类型的实参。 例如,对于以下函数定义:
def func(foo, bar=None, **kwargs):
pass
foo, bar 和 kwargs 是 func 的形参。 但是,在调用 func 时,例如:func(42, bar=314, extra=somevar)
实际的值 42, 314 和 somevar 则是实参。
形参:是在定义函数的时候的概念
-
位置参数
-
默认参数
实参:是在调用函数的时候的概念
- 位置参数
- 关键字参数
#!/usr/bin/bash
show (){
local user="shark" #local 本地解析,出了函数不会生效
echo $user #所以下面命令不会生效
}
show
echo $user
如何将可选参数或关键字参数从一个函数传递到另一个函数?
使用函数参数列表中的 * 和 ** 说明符收集参数;这会将位置参数作为元组,
将关键字参数作为字典。然后,您可以使用 * 和 ** 调用另一个函数时传递这些参数:
def f(x, *args, **kwargs):
…
kwargs[‘width’] = ‘14.3c’
…
g(x, *args, **kwargs)
In [1]: def foo(*args, **kwargs):
...: print(args)
...: print(kwargs)
...:
In [2]: foo(1,2,a=10,c=100)
(1, 2)
{'a': 10, 'c': 100}
In [3]: foo([1,2,3])
([1, 2, 3],)
{}
In [4]: foo(*[1,2,3])
(1, 2, 3)
{}
In [5]: foo(*[1,2,3],**{'a':1,"b":2})
(1, 2, 3)
{'a': 1, 'b': 2}
In [1]: isinstance('hello',str)
Out[1]: True
In [2]: isinstance([],str)
Out[2]: False
In [3]: isinstance([],list)
Out[3]: True
In [4]: isinstance({'a':1},dict)
Out[4]: True
In [5]: isinstance(1.1,float)
Out[5]: True
格式化输出
字符串的格式化输出目前有三种方式
%
方式(陈旧) python2.x及以上 都支持str.format()
方式 python2.7及以上都支持f-string
方式 (Python3.6 及以上推荐使用)
%百分号方式
In [13]: tpl = "i am %s"
In [14]: msg = tpl % "neko"
In [15]: msg
Out[15]: 'i am neko'
In [16]: tpl = "i am %s,%s"
In [17]: msg = tpl % ("neko",18)
In [18]: msg
Out[18]: 'i am neko,18'
In [19]: user = "neko"
In [20]: age = 18
In [21]: msg = "i am %s,%s" % (user, age)
In [22]: msg
Out[22]: 'i am neko,18'
str.format()方式
In [4]: msg = "i am {}"
In [5]: msg.format("neko")
Out[5]: 'i am neko'
In [6]: msg = "i am {},{}"
In [7]: msg.format("neko",18)
Out[7]: 'i am neko,18'
In [8]: li = ["neko",18]
In [9]: msg.format(*li)
Out[9]: 'i am neko,18'
In [10]: msg = "i am {name},{age}"
In [11]: msg.format(age=18,name="neko")
Out[11]: 'i am neko,18'
In [12]: info = {"name":"neko","age":18}
In [13]: msg.format(**info)
Out[13]: 'i am neko,18'
f-strings 方式
需要先定义好变量,变量名必须和字符串中大括号内的变量名一致
In [15]: ip="192.168.116.145"
In [16]: user="admin"
In [17]: pwd="Neko123@"
In [18]: conn_mysql = f"mysql -u{user} -p{pwd} -h{ip}"
In [19]: conn_mysql
Out[19]: 'mysql -uadmin -pNeko123@ -h192.168.116.145'