Python第七天   函数  函数参数   函数里的变量   函数返回值  多类型传值     函数递归调用   匿名函数   内置函数

目录

Pycharm使用技巧(转载)

Python第一天  安装  shell  文件

Python第二天  变量  运算符与表达式  input()与raw_input()区别  字符编码  python转义符  字符串格式化

Python第三天 序列  5种数据类型  数值  字符串  列表  元组  字典

Python第四天   流程控制   if else条件判断   for循环 while循环

Python第五天   文件访问    for循环访问文件    while循环访问文件   字符串的startswith函数和split函数

Python第六天   类型转换

Python第七天   函数  函数参数   函数变量   函数返回值  多类型传值    冗余参数   函数递归调用   匿名函数   内置函数   列表表达式/列表重写

Python第八天  模块   包   全局变量和内置变量__name__    Python path

Python第九天  面向对象  类定义   类的属性    类的方法    内部类   垃圾回收机制   类的继承 装饰器

Python第十天   print >> f,和fd.write()的区别    stdout的buffer  标准输入 标准输出  标准错误   重定向 输出流和输入流

Python第十一天    异常处理  glob模块和shlex模块    打开外部程序和subprocess模块  subprocess类  Pipe管道  operator模块   sorted函数   生成器  walk模块   hashlib模块

Python第十二天     收集主机信息     正则表达式  无名分组   有名分组

Python第十三天   django 1.6   导入模板   定义数据模型   访问数据库   GET和POST方法    SimpleCMDB项目   urllib模块   urllib2模块  httplib模块  django和web服务器整合  wsgi模块   gunicorn模块

Python第十四天 序列化  pickle模块  cPickle模块  JSON模块  API的两种格式

Python第十五天  datetime模块 time模块   thread模块  threading模块  Queue队列模块  multiprocessing模块  paramiko模块  fabric模块

Python函数
函数就是完成特定功能的一个语句组,这组语句可以作为一个单位使用,并且给它取一个名字。
可以通过函数名在程序的不同地方多次执行(这通常叫函数调用)。

函数定义要在函数调用之前,否则函数调用会找不到要调用的函数  跟编译型语言不一样!!!!!!!!!

函数要写在python文件的最前面,否则NameError: name 'wordCount' is not defined

  1. import os
  2. import sys
  3. import string
  4.  
  5. s="""hello world python"""
  6.  
  7. wordCount(s)
  8.  
  9. def wordCount(s):
  10. chars=len(s)
  11. words=len(s.split())
  12. lines=s.count('\n')
  13. print lines,words,chars
  14. Traceback (most recent call last):
  15. File "G:/py/pytest33/test123.py", line 20, in <module>
  16. wordCount(s)
  17. NameError: name 'wordCount' is not defined

预定义函数
可以直接使用

自定义函数
用户自己编写

函数的定义和调用
//定义
def 函数名([参数列表]):
函数名:如果由多个单词组成,第二个单词的首字母应该大写

//调用
函数名([参数列表])
     
#!/usr/bin/python

def fun():
    sth = raw_input("Please input something: ")
    try:
        if type(int(sth)) == type(1):
            print "%s is a number" %sth
    except ValueError:
        print "%s is not number" %sth

fun()

最好这样写if type(int(num)) == type(1)
type返回的不是字符串,是type对象。

函数名赋值给变量
int2give = int
print int2give('3')

------------------------------------------
函数参数

形式参数和实际参数
- 在定义函数时,函数名后面括号中的变量名称叫做“形式参数”,或者称为“形参”
- 在调用函数时,函数名后面括号中的变量名称叫做“实际参数”,或者称为“实参”

形参和实参一定要一一对应

def connect(host,port)

a=sum(127.0.0.7,3306)  127.0.0.1对应host,3306对应port,不能够a=connect(3306,127.0.01)

或者指定参数

fun(1,2)
fun(x=1,y=2) 传参的另一种方式,指定参数,不过很少用
fun(1)

sys.argv跟shell内置变量一样
sys.argv[0] 相当于 $0表示脚本本身
sys.argv[1] 相当于 $1 第一个参数
sys.argv[2] 相当于 $2 第二个参数
sys.argv     返回所有参数列表['memory.py', '2', 'uu']
len(sys.argv)   参数的个数

#!/usr/bin/python
import sys
import os

def isNum(s):
    for i in s:
        if i in '0123456789':
            pass
        else:
            #print "%s is not a number" %s
            break
    else:
        print s

isNum(sys.argv[1])

----------------------------------

练习
打印系统的所有PID
要求从/proc读取。
os.listdir()
os.listdir:列出目录下的所有文件和目录,列表形式,每个列表元素都是字符串

  1. 打印系统的所有PID
  2. 要求从/proc读取。
  3. os.listdir()
  4. os.listdir:列出目录下的所有文件和目录,列表形式,每个列表元素都是字符串
  5.  
  6. #!/usr/bin/env python
  7. # -*- coding:utf-8 -*-
  8. # __author__="huazai"
  9. """
  10. pycharm 使用指南
  11. Date:2016.08.12
  12. """
  13.  
  14. import os
  15. import sys
  16. import string
  17.  
  18. def isNum(s):
  19. for i in s:
  20. if i in '':
  21. pass
  22. else: # print "%s is not a number" %s
  23. break
  24. else:
  25. print s
  26.  
  27. for i in os.listdir('/proc'):
  28. isNum(i)
  29.  

  30. #!/usr/bin/env python
  31. # -*- coding:utf-8 -*-
  32. # __author__="huazai"
  33. """
  34. pycharm 使用指南
  35. Date:2016.08.12
  36. """
  37.  
  38. import os
  39. import sys
  40. import string
  41.  
  42. def isNum(s):
  43. if s in '':
  44. print s
  45.  
  46. for i in os.listdir('/proc'):
  47. isNum(i)

----------------------------------------------------------

函数默认参数
缺省参数(默认参数)
def fun(x, y=100):
print x,y
默认参数只能写在最右边,否则会报错 def fun(y=100,x): 这个报错

---------------------------------------------------------
函数里的变量
局部变量和全局变量
- Python中的任何变量都有特定的作用域
- 在函数中定义的变量一般只能在该函数内部使用,这些只能在程序的特定部分使用的变量我们称之为局部变量
- 在一个文件顶部定义的变量可以供文件中的任何函数调用,这些可以为整个程序所使用的变量称为全局变量

global语句
global 变量名
强制声明为全局变量

全局变量在函数外声明,在函数里面global引用全局变量
在函数里面global声明全局变量,在函数外可以引用这个全局变量

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. # __author__="huazai"
  4. """
  5. pycharm 使用指南
  6. Date:2016.08.12
  7. """
  8.  
  9. import os
  10. import sys
  11. import string
  12.  
  13. x = 100
  14.  
  15. def fun():
  16. global x
  17. x += 1
  18. print x
  19.  
  20. fun()
  21. print x

globals函数打印当前环境的所有全局变量,返回字典
locals函数打印当前环境的所有局部变量,返回字典

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. # __author__="huazai"
  4. """
  5. pycharm 使用指南
  6. Date:2016.08.12
  7. """
  8.  
  9. import os
  10. import sys
  11. import string
  12.  
  13. x = 100
  14. def fun():
  15. x = 1
  16. y = 1
  17. print locals()
  18.  
  19. fun()
  20. print globals()

-------------------------------------------------------------------------------------------------------------

函数返回值

而 Python 和大多数其它语言不同,可以返回多个返回值,当 Python 返回多个值的时候,python 解释器把这些值放进一个 tuple 里面,所以 Python 的函数返回多值其实就是返回一个 tuple,该 tuple 本质上也是一个值。

  1. def myfunc():
  2. return "ruhua", "xingxing", "zhaoritian"
  3.  
  4. rst = myfunc()
  5. print(rst) # 可以看到是一个 tuple
  6. print(type(rst)) # tuple 类型

当 python 返回多个值的时候,接收变量个数只能为一个或返回值的个数, 因为一个变量接收的是整个 tuple,而多个变量接收的是 tuple 里面成员的个数。

  1. def myfunc():
  2. return "ruhua", "xingxing", "zhaoritian"
  3.  
  4. rst = myfunc() # ok
  5. one, two, three = myfunc() # ok
  6. one, two = myfunc() # 错误

函数体内部的语句在执行时,一旦执行到 return 时,函数就执行完毕,并将结果返回, 如果没有 return 语句,函数执行完毕后也会返回结果,只是结果为 None

- 函数被调用后会返回一个指定的值
- return 返回值
- 返回值可以是任意类型
- return执行后,函数终止
- return与print区别

--------------------------------------------------------------------------------------------------------------
多类型传参

元组传参
形参前面加一个* 传入元组,元组要放在右边

  1. 至少要3个参数,如果只传入元组,里面元组一定至少要有3个元素,填充形参xyz
  2. def fun(x, y, *z):
  3. print x
  4. print y
  5. print z
  6. print x+y+z[0]
  7.  
  8. if __name__ == '__main__':
  9. t1 = (1,2,3,4)
  10. t = (1,2,3)
  11. fun(*t1)
  12. 返回:1 2 (3, 4) 6
  13. fun(*(1, 2, 3))
  14. 返回: 1 2 (3,) 6
  15. fun(1, *t)
  16. 返回: 1 1 (2,3) 4

字典传参
字典的key的名字要跟形参的名字一样,x,y,z否则会报错

  1. 跟元组传参一样,至少要3个参数,如果只传入字典,字典里面一定至少要有3个元素,填充形参xyz
  2. def fun(x,y,z,**args):
  3. print x+y+z
  4. print args
  5.  
  6. if __name__ == '__main__':
  7. dic = {'x': 1, 'y': 3, 'z': 5,'a':6} # 字典的key必须要加引号,否则报错
  8. fun(**dic)
  9. 返回:
  10. 9
  11. {'a': 6}
  12.  
  13. def fun(x,y,z,**args):
  14. print x+y+z
  15. print args
  16.  
  17. if __name__ == '__main__':
  18. fun(x=1,y=2,z=3,a=6)
  19. 返回:
  20. 6
  21. {'a': 6}
  22.  
  23. def fun(x,y,z,**args):
  24. print x+y+z
  25. print args
  26.  
  27. if __name__ == '__main__':
  28. dic = {'a': 1, 'b': 3, 'c': 5,'c':6} # 字典的key必须要加引号,否则报错
  29. fun(1,2,3,**dic)
  30.  
  31. 注意:
  32. def fun(x,y,z,**args):
  33. print x+y+z
  34. print args
  35.  
  36. if __name__ == '__main__':
  37. dic = {'x': 1, 'y': 3, 'z': 5,'a':6} # 字典的key必须要加引号,否则报错
  38. fun(1,2,3,**dic)
  39. 注意:输入了默认参数,那么字典的key就不能跟参数一样,不能用xyz,否则会报错
  40. Traceback (most recent call last):
  41. File "C:/Users/Administrator/Desktop/Գ��python�༶5��/python��ϰ/aa.py", line 23, in <module>
  42. fun(1,2,3,**dic)
  43. TypeError: fun() got multiple values for keyword argument 'y'

位置参数和关键字参数

  1. def say(a,b,*args,**kwargs):
  2. print a,b,args,kwargs

a:位置参数
b:位置参数
*args:不固定的位置参数
**kwargs:关键字参数
pack:打包
unpack:解包

命名关键字参数,不推荐用
命名关键字参数是在 Python 3 中新增加的一种语法,它和关键字参数 **kw 不同,命名关键字参数需要一个特殊分隔符 * ,* 后面的参数被视为命名关键字参数。例如,只接收 sex 和 lover 作为关键字参数,这种方式定义的函数如下。

  1. def Human(name, age, *, sex, lover):
  2. print(name, age, sex, lover)
  3.  
  4. #调用方式
  5. Human('ruhua', 18, sex='f', lover='tangbohu')

---------------------------------------------------------
函数递归调用

计算阶层
递归调用
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)

print factorial(5)

注意事项
必须有最后的默认结果: if n == 0
递归参数必须向默认结果收敛的: factorial(n-1)

打印目录下所有文件

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. # __author__="huazai"
  4. """
  5. pycharm 使用指南
  6. Date:2016.08.12
  7. """
  8.  
  9. import os
  10. import sys
  11. import string
  12.  
  13. def print_files(path):
  14. # isdir, isfile, join = os.path.isdir, os.path.isfile, os.path.join
  15. # print isdir,isfile,join
  16.  
  17. lsdir = os.listdir(path)
  18. dirs = [i for i in lsdir if os.path.isdir(os.path.join(path, i))]
  19. files = [i for i in lsdir if os.path.isfile(os.path.join(path, i))]
  20.  
  21. if dirs:
  22. for d in dirs:
  23. print_files(os.path.join(path, d))
  24.  
  25. if files:
  26. for f in files:
  27. print os.path.join(path, f)
  28.  
  29. print_files(sys.argv[1])
  30.  
  31. 把函数名赋值给变量
  32. # isdir, isfile, join = os.path.isdir, os.path.isfile, os.path.join
  33. # print isdir,isfile,join

---------------------------------------------------------------------------

匿名函数
lambda函数是一种快速定义单行的最小函数,可以用在任何需要函数的地方。
lambda语句中,冒号前是参数,可以有多个,逗号隔开,冒号右边是返回值。
lambda语句构建的其实是一个函数对象

def fun(x, y):
return x*y
fun(2, 3)
r = lambda x,y: x*y
r(2, 3)

def add(x, y):
return x + y
sum = reduce(add, [1, 2, 3])

reduce(lambda x,y:x+y, range(1,4))

匿名函数优点:
- 1.使用python写一些脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。
- 2. 对于一些抽象的,不会被别的地方再重复使用的函数,有时候函数起个名字也是个难题,使用lambda不需要考虑命名的问题。
- 3. 使用lambda在某些时候让代码更容易理解。

-------------------------------------------

内置函数

所有内置函数和内置类都在__builtin__模块(__builtin__前后双下划线)
查询内置函数和类
https://docs.python.org/2/library/index.html

绝对值,最大最小值
abs()
max()
max('12345','789')
字符串'789‘比字符串’12345‘大,字符串是从左到到右开始比较的,'7’比‘1'大,所以输出’789'
min()

len() 参数是一个对象(字符串,元组,字典)不能是整数
divmod() 参数是两个数字,返回商和余数
pow() 乘方
round() 给出小数点的精度,没有第二个参数直接四舍五入,round(12.367,3)保留三位小数

先进行四舍五入的运算,如果小数点精度最后一位是偶数复合条件,如果小数点精度的最后一位四舍五入是奇数,则舍弃原小数点精度后的所有数字,以及保证
小数点精度最后一位必须是偶数

常用函数
callable() 可被调用的,例如类,函数
type()
isinstance() isinstance(s,(int,tuple,str)),s是一个对象,第二个参数是元组,判断s这个对象的数据类型在不在第二个参数元组里,是返回true ,否返回false

  1. class A(object):
  2. pass
  3.  
  4. a=A()
  5. print isinstance(a,A)

cmp() 如果是字符串,则逐个字符比较,一旦有字符比较出来就不往下比较,返回值:-1 左边比右边大,0 相等,1 右边比左边大,
range()
xrange()

类型转换函数
int() 参数如果是字符串,只能是纯数字字符串,不能带小数
long() 参数如果是字符串,只能是纯数字字符串,不能带小数
float() 参数如果是字符串,只能是纯数字字符串,不能带小数
complex()
str()
list()
tuple()
hex()
oct()
chr() 输入0<x<256 返回ascii字符
ord() 输入ascii的单个字母,返回数字
eval() 将有效表达式求值,其实就是去掉字符串

字符串处理函数
下面函数实例化一个string对象或声明一个string变量
str.capitalize()   将字符串里的第一个字符大写并返回
str.replace()   replace(old,new,count)
str.split()   字符串切成列表 不指定分隔符,那么默认以空格,tab键,换行符作为分隔 split('.',1) 点为分隔,切1次
str.join()     列表连接为字符串 ''.join([str(i)  for i in range(10)])  join会在被插入字符中间插入 ','.join([str(i)  for i in range(10)]) 逗号变为的分隔符
s= 'sdf'
s.join('22')
'2sdf2'

静态函数,不需要实例化一个string对象
string模块   import  string
string.capitalize('hello')
string.replace('wecan','a','t')
string.split('we,w,e',',')
string.join('ww','tt')

从python3开始,序列处理函数和高阶函数用itertools模块来代替,垃圾猿课python

zip(),map(),filter(),slice()


提示

16行报错,vim +16 xx.py


函数的参数不能是连字符

def f(x, **kwargs):
print x
print kwargs

f(1,a=10,b-b=20) 报错 涉及变量的命名
f(1,a=10,b_b=20) 正确

变量的命名
- 变量名由字母、数字、下划线组成。
- 变量不能以数字开头
- 不可以使用关键字

In [1]: def f(x, **kwargs):
...: print x
...: print kwargs
...: f(1,a=10,b-b=20)
File "<ipython-input-1-35f95bb06c84>", line 4
f(1,a=10,b-b=20)
SyntaxError: keyword can't be an expression

Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数的更多相关文章

  1. Python——day14 三目运算、推导式、递归、匿名、内置函数

    一.三目(元)运算符 定义:就是 if...else...语法糖前提:简化if...else...结构,且两个分支有且只有一条语句注:三元运算符的结果不一定要与条件直接性关系​ cmd = input ...

  2. python基础之递归,匿名,内置函数

    递归函数: 什么是递归函数? 函数递归调用:在调用一个函数的过程中,又直接或间接地调用了该函数本身. 递归必须要有两个明确的阶段: ①递推:一层一层递归调用下去,强调:每进入下一层问题规模减少 ②回溯 ...

  3. python基础12_匿名_内置函数

    一个二分查找的示例: # 二分查找 示例 data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35, 36, ...

  4. python之三元表达式与生成式与匿名与内置函数(部分)

    目录 三元表达式 各种生成式 列表生成式(可同样作用于集合) 字典生成式 匿名函数 重要内置函数 map() zip() filter() reduce() 常见内置函数(部分) 三元表达式 三元表达 ...

  5. Day5 函数递归,匿名、内置行数,模块和包,开发规范

    一.递归与二分法 一.递归 1.递归调用的定义 递归调用:在调用一个函数的过程中,直接或间接地调用了函数本身 2.递归分为两类:直接与间接 #直接 def func(): print('from fu ...

  6. python基础-匿名函数和内置函数

    匿名函数和内置函数 匿名函数:没有名字,使用一次即被收回,加括号就可以运行的函数. 语法:lambda 参数:返回值 使用方式: 将匿名函数赋值给变量,给匿名函数一个名字,使用这个变量来调用(还不如用 ...

  7. Python学习(八) —— 内置函数和匿名函数

    一.递归函数 定义:在一个函数里调用这个函数本身 递归的最大深度:997 def func(n): print(n) n += 1 func(n) func(1) 测试递归最大深度 import sy ...

  8. python基础-requests模块、异常处理、Django部署、内置函数、网络编程

     网络编程 urllib的request模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应. 校验返回值,进行接口测试: 编码:把一个Python对象编码转 ...

  9. python学习 day013打卡 内置函数

    本节主要内容: 内置函数: 内置函数就是python给你提供的.拿来直接用的函数,比如print,input等等.截止到python版本3.6.2 python一共提供了68个内置函数.他们就是pyt ...

随机推荐

  1. [Swift]LeetCode736. Lisp 语法解析 | Parse Lisp Expression

    You are given a string expressionrepresenting a Lisp-like expression to return the integer value of. ...

  2. [Swift]LeetCode953. 验证外星语词典 | Verifying an Alien Dictionary

    In an alien language, surprisingly they also use english lowercase letters, but possibly in a differ ...

  3. [Swift]LeetCode1018. 可被 5 整除的二进制前缀 | Binary Prefix Divisible By 5

    Given an array A of 0s and 1s, consider N_i: the i-th subarray from A[0] to A[i] interpreted as a bi ...

  4. Linux 遭入侵,挖矿进程被隐藏排查记录

    今天来给大家分享下这两天遇到的一个问题,服务器被挖矿了,把我的排查记录分享下,希望能帮到有需要的同学. 问题原因 多台服务器持续告警CPU过高,服务器为K8s的应用节点,正常情况下CPU使用率都挺低的 ...

  5. 【Spark篇】---Spark中资源和任务调度源码分析与资源配置参数应用

    一.前述 Spark中资源调度是一个非常核心的模块,尤其对于我们提交参数来说,需要具体到某些配置,所以提交配置的参数于源码一一对应,掌握此节对于Spark在任务执行过程中的资源分配会更上一层楼.由于源 ...

  6. Javascript基本类型回顾

    本文是学习和总结ECMAScript5.1规范形成的.是对规范中所提及的Javascript类型进行剖析后的个人观点的表达(如有Bug望各位道友指正).主要是各类型的实例方法,不包含任务构造函数的方法 ...

  7. VueJs 源码分析 ---(一) 整体对 vuejs 框架的理解

    vue-2.x SourceCode vue 2.x 源码解析 关于vue,以及为何要来写这份源码解析的原因 笔者从最开始接触到 vue 应该还是在 15年 10月份左右,当时听说 前端圈中发生很多的 ...

  8. MVC实现多级联动

    前言 多级联动(省级联动)的效果,网上现成的都有很多,各种JS实现,Jquery实现等等,今天我们要讲的是在MVC里面,如何更方便.更轻量的实现省级联动呢? 实现效果如下: 具体实现 如图所示,在HT ...

  9. keepalived+双主实践HA

    工作不怎么忙,搞点儿开发吧差点儿事,就想着弄点儿架构的事儿.正好前段时间看过关于keepalived+双主实现高可用的文章,也恰好身边的朋友所在的公司也部分用这个架构.没什么事儿就搞搞吧,正好对比下M ...

  10. Servlet+Tomcat总结

    Tomcat的缺省端口是多少,怎么修改 1.找到Tomcat目录下的conf文件夹 2.进入conf文件夹里面找到server.xml文件 3.打开server.xml文件 4.在server.xml ...