簡體   English   中英

如何重構此代碼以使其更簡潔?

[英]How can I refactor this code to be more concise?

我正在使用Python從Google Analytics Core Reporting API中提取一些數據。 我已經設法使用函數來對API進行不同的調用(下面只是兩個例子)但是我想知道如何重構它以使其更短? 還有很多重復的代碼。

def get_pvs(service, profile_id, start_date, end_date, type, data):
    if type == "url":
        return service.data().ga().get(
            ids = 'ga:' + profile_id,
            start_date = start_date,
            end_date = end_date, 
            metrics = 'ga:pageviews', 
            dimensions = 'ga:pagePath',   
            filters = 'ga:pageviews!=0',
            sort = '-ga:pageviews',
            max_results = '10000').execute()
    elif type == "author":
        return service.data().ga().get(
            ids = 'ga:' + profile_id,
            start_date = start_date,
            end_date = end_date, 
            metrics = 'ga:pageviews', 
            # Post Author
            dimensions = 'ga:dimension2',
            sort = '-ga:pageviews',
            max_results = '100').execute()   

使用特定於類型的參數創建一個字典,然后將其應用於**kw

def get_pvs(service, profile_id, start_date, end_date, type, data):
    if type == 'url':
        kwargs = {
            'dimensions': 'ga:pagePath',
            'filters': 'ga:pageviews!=0',
            'maxresults': 100
        }
    elif type == 'author':
        kwargs = {
            'dimensions': 'ga:dimension2',
            'max_results': '100'
        }
    return service.data().ga().get(
        ids = 'ga:' + profile_id,
        start_date = start_date,
        end_date = end_date, 
        metrics = 'ga:pageviews', 
        sort = '-ga:pageviews',
        **kwargs).execute()   

我把共同的論點留在了原地。 如果type可以有更多值,那么你可能需要添加else: return None

另一種方法:

TYPE_SETTINGS = {
        'url': {
            'dimensions': 'ga:pagePath',
            'filters': 'ga:pageviews!=0',
            'max_results': '10000',
            },
        'author': {
            'dimensions': 'ga:dimension2',
            'max_results': '100',
            },
        }

def get_pvs(service, profile_id, start_date, end_date, type, data):
    if type in TYPE_SETTINGS:
        return service.data().ga().get(
                ids = 'ga:' + profile_id,
                start_date = start_date,
                end_date = end_date,
                metrics = 'ga:pageviews',
                sort = '-ga:pageviews',
                **TYPE_SETTINGS[type]).execute()

如果您需要在將來定義更多type而不是urlauthor ,則可以輕松修改TYPE_SETTINGS

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM