python学习笔记一(语法)

本文介绍了Python的基础知识,包括list、tuple、dict和set等基本数据类型的操作,函数参数的多种定义方式,切片功能的使用,装饰器的实现原理及应用,以及高阶函数如map、reduce和sorted的应用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

持续更新中

1、list,tuple,dict,set

  • list为可变数组,内容可变,定义方式如下:[‘a’, ‘b’, 3, [4, 5] ]。
  • tuple为不可变数组,内容不可变,定义方式如下:(‘a’, ‘b’, 3, [4, 5])。
    • 只有一个数字的tuple是,需要使用a=(1 ,)方式定义,否则会识别为int型。
  • dict为字典,可以主动修改key,定义方式如下:[‘a’:1, ‘b’:2, ‘c’:[4, 5]]
  • set为不可存在重复选项的list

2、函数接收可变参数可使用如下方法

def calc(*numbers):
    sum = 0

    for i in numbers:
        sum += i*i

    return sum

print(calc(1,2,3,4))

3、函数接收关键字参数可使用如下方法

def info(name, age, **other):
    print('name: ', name, 'age: ', age, 'other :', other)

extra = {'city': 'beijing', 'company': 'baidu'}
info('cheng', 25, city:'beijing', 'company':'baidu')
info('cheng', 25, **extra)

4、函数接收命名关键字参数可使用如下方法

def info2(name, age, *, city='fuzhou', company):
    print(name, age, city, company)

info2('chengwei', 25, company='baidu')

其中*不需要传入,为标记,说明后面的参数为命名关键字参数,如果没有指定默认值,则该参数为必填参数。
如果已经存在可变参数,则这个*可以省略,如下

def info2(name, age, *args, city='fuzhou', company):
    print(name, age, city, company)

info2('chengwei', 25, aaa, bbb, company='baidu')

5、参数组合
在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数,如下

def info3(name, age, sex='male', *numbers, city='beijing', company, **other):
    print(name, age, sex, numbers, city, company, other)

info3('cheng', 25, 'male', 1, 2, city='fuzhou', company='baidu', school='university')

6、对于任意的函数,都可以使用tuple与dict的组合来传入参数,如下

def info3(name, age, sex='male', *numbers, city='beijing', company, **other):
    print(name, age, sex, numbers, city, company, other)

args = ('xing', 22, 'cheng', 1, 2)
kw = {'city': 'fuzhou', 'company': 'wangyi', 'school': 'highschool'}
info3(*args, **kw)
//输出 xing 22 cheng (1, 2) fuzhou wangyi {'school': 'highschool'}

7、python的切片功能,能够是用在list, tuple,str中,如下

>>> l = range(100)
>>> l[1:10]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> l[:10]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> l[-10:]
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
>>> l[:10:2]
[0, 2, 4, 6, 8]
>>> l[::5]
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
>>> t = (1,2,3,4,5,6)
>>> t[:3]
(1, 2, 3)
>>> s = "hello world"
>>> s[:5]
'hello'
#python中最简单的将字符串逆序输出的方法
>>> s
'12345'
>>> s[::-1]
'54321'

8、装饰器的使用

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import functools
def log(func):
    def wrapper(*args, **kw):
        print('call %s()' % func.__name__)
        return func(*args, **kw)
    return wrapper

@log
def now():
    print('2015-01-01')

now()
#此时now的__name__属性已经变成了wrapper
print(now.__name__)

def log2(text):
    def decorator(func):
        def wrapper(*args, **kw):
            print('call %s(), %s' % (func.__name__, text))
            return func(*args, **kw)
        return wrapper
    return decorator

@log2('hello world!')
def now2():
    print('2015-01-02')

now2()
print(now2.__name__)

def log3(text):
    def decorator(func):
        #使用functools.wraps方法来修改wrapper的__name__属性
        @functools.wraps(func)
        def wrapper(*args, **kw):
            print('call %s(), %s' % (func.__name__, text))
            return func(*args, **kw)
        return wrapper
    return decorator

@log3('hello world!')
def now3():
    print('2015-01-03')

now3()
print(now3.__name__)

def log4(text):
    def decorator(func):
        #使用functools.wraps方法来修改wrapper的__name__属性
        @functools.wraps(func)
        def wrapper(*args, **kw):
            print('before call %s(), %s' % (func.__name__, text))
            res = func(*args, **kw)
            print('after call')
            return res

        return wrapper

    return decorator

@log4('hello world!')
def now4():
    print('2015-01-03')

now4()

# call now()
# 2015-01-01
# wrapper
# call now2(), hello world!
# 2015-01-02
# wrapper
# call now3(), hello world!
# 2015-01-03
# now3
# before call now4(), hello world!
# 2015-01-03
# after cal

9、高阶函数map,reduce,sorted
sorted的用法

#正常用法
>>> sorted([36, 5, -12, 9, -21])
[-21, -12, 5, 9, 36]
#此外,sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序:

>>> sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]
>>> L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
>>> def sort_by_name(l):
...     return l[0]
... 
>>> sorted(L, key=sort_by_name)
[('Adam', 92), ('Bart', 66), ('Bob', 75), ('Lisa', 88)]
>>> def sort_by_score(l):
...     return l[1]
... 
>>> sorted(L, key=sort_by_score)
[('Bart', 66), ('Bob', 75), ('Lisa', 88), ('Adam', 92)]
>>> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值