python基础进阶

函数

函数就是完成特定功能的一个语句组,这组语句可以作为一个单位使用,并且给它取一个名字。

可以通过函数名在程序的不同地方多次执行(这通常叫函数调用)。

预定义函数

    可以直接使用

自定义函数

    用户自己编写

 

为什么使用函数

降低编程难度

-通常将一个复杂的大问题分解成一系列的小问题,然后将小问题划分成更小的问题,当问题细化为足够简单是,我们就可以分而治之。各个小问题解决了,大问题就迎刃而解了。

代码重用

-避免重复劳作,提供效率

 

 

函数的定义和调用

-def函数名([参数列表]): //定义

-函数名([参数列表]): //调用

 

 
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
# @Time : 2017/11/30 23:52
# @Author : name
# @File : 8.py


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()


 

 

 

函数参数

形式参数和实际参数

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

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

 

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
# @Time : 2017/12/1 21:41
# @Author : name
# @File : 9.py


import sys

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

isNum(sys.argv[1])

 

 

练习

打印系统的所有的PID

要求从/proc读取

os.listdir()

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
# @Time : 2017/12/1 21:41
# @Author : name
# @File : 9.py

import os
import sys

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

for p in os.listdir('/proc'):
    isNum(p)

 

 

函数默认参数

缺省参数(默认参数)

def fun(x,y = 100):

    print(x, y)

fun(1,2)

fun(1)

 

 

函数变量

局部变量和全局变量

-python中的任何变量都有特定的作用域

-在函数中定义的变量一般只能在该函数内部使用,这些只能在程序的特定部分使用的变量,我们称之为局部变量

-在一个文件顶部定义的变量可以供文件中的任何函数调用,这些可以为整个程序所使用的变量成为全局变量

 

global #在函数中将变量声明成全局变量

locals() #在函数中打印函数中的变量,在函数外,打印所有变量

 

 

函数返回值

-函数被调用后会返回一个指定的值

-函数调用后默认返回None

-return返回值

-返回值可以是任意类型

-return执行后,函数终止

-return与print区别

 

 
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
# @Time : 2017/12/1 21:52
# @Author : name
# @File : 10.py

import os

def isNum(s):
for i in s:
if s.isdigit():
return True
return False

for p in os.listdir('/proc'):
if isNum(p):
print(p)

 

 

多类型传值

def fun(x, y, z):

    return x + y + z

t1 = (1, 2, 3)

fun(*t1)

fun(*(2, 3, 4))

 

fic = {'x': 1, 'y': 3, 'z': 4}

fun(**dic)

 

 

冗余参数

向函数传元组和字典

处理多余实参

def fun(x, y, *args, **kwargs)

函数

递归调用

计算阶乘

普通方法:

-使用循环

 

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
# @Time : 2017/12/3 19:16
# @Author : name
# @File : 12.py

def factorial(n):
    sum = 1
    for i in xrange(1, n+1):
        sum *= i
    return sum
print(factorial(5))

 

 

递归的注意事项

必须有最后的默认结果

    if n == 0

递归参数必须向默认结果收敛的:

    factorial(n-1)

 

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
# @Time : 2017/12/3 20:00
# @Author : name
# @File : 13.py

def factorial(n):
    if n == 0:
        return 1
    else :
        return n * factorial(n-1)

print(factorial(5))

 

小练习

打印目录下所有文件

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
# @Time : 2017/12/3 20:04
# @Author : name
# @File : 14.py

import os
import sys


def print_files(path):
    lsdir = os.listdir(path)
    dirs = [i for i in lsdir if os.path.isdir(os.path.join(path, i)) ]
    files = [i for i in lsdir if os.path.isfile(os.path.join(path, i))]
    if files:
        for f in files:
            print os.path.join(path, f)
    if dirs:
        for d in dirs:
            print_files(os.path.join(path, d))
print_files(sys.argv[1])

 

匿名函数

lambda函数是一种快速定义单行的最小函数,可以用在任何需要函数的地方。

def fun(x,y):

    return x * y

fun(2, 3)

 

r = lambda x,y: x * y

r(2, 3)

 

匿名函数的优点:

-1. 使用python写一些脚本是,使用lambda可以省去定义函数的过程,让代码更加精简。

-2. 对于一些抽象的,不会被别的地方再重复使用的函数,有时候函数起个名字也是个难题,使用lambda不需要考虑命名的问题。

-3. 使用lambda在某些时候让代码更容易理解。

 

lambda基础

lambda语句中,冒号前是参数,可以有多个,逗号隔开,冒号右边是返回值。

lambda语句构建的其实是一个函数对象。

 

def  add (x, y):

    return x + y

sum = reduce(add,[1, 2, 3])

 

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

 

内置函数

https://docs.python.org

可以查看python的内置函数的使用方法

 

 

例子

返回数字的绝对值

    abc(-12)

取列表最大最小值

max([1, 2, 3, 4, 5])

min([1, 2, 3, 4, 5])

 

常用函数

绝对值,最大最小值

abs() #绝对值

max() #最大值

min() #最小值

 

len() #序列长度

divmod() #

pow()

round()

callable()

type()

isnstance

cmp()

range()

xrange()

 

类型转换函数

int()

long()

float()

comples()

str()

list()

tuple()

hex() #16进制

oct() #8进制

chr()

ord()

eval()

 

字符串处理函数(字符串的方法)

str.capitalize()

str.replace()

str.split()

str.join()

string模块

 

 

序列处理函数

len() #取序列的长度

max() #取序列的最大值

min() #取序列的最小值

 

filter()

zip()

map()

reduce()

 

使用lambda

filter(lambda x:x % 2 == 0, range(10))

    [0, 2, 4, 6, 8]

map(lambda x, y: x * y, range(5), range(5))

    [0, 1, 4, 9, 16]

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

    5050

 

列表表达式

[i * 2 + 10 for i in range(10)]

    [10, 12, 14, 16, 18, 20, 22, 24, 26, 28]

[i for i in range(10) if i%3 == 0]

    [0, 3, 6, 9]

 

 

 

模块使用

模块是python组织代码的基本方式

一个python脚本可以单独运行,也可以导入到另一个脚本中运行,当脚本被导入运行时,我们将其称为模块(module)

所有的.py文件都可以作为一个模块导入

 

模块名与脚本的文件名相同

例如我们编写了一些名为hello.py的脚本,则可以在另一个脚本中用import hello语句来导入它

 

python的模块可以按目录组织为包

创建一个包的步骤:

-创建一个名字为包名的目录

-在该目录下创建一个__init__.py文件

-根据需要,在该目录下存放脚本文件或已编译的扩展及子包

-import pack.mi,pack.m2,pack.m3

 

 

python path

sys.path

export PYTHONPATH

 

 

转载于:https://my.oschina.net/peizh/blog/1583226

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值